Erro de expressão: _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)

Este erro ocorre durante o tempo de execução e não sei ao certo o que está causando isso - o código parece correto para mim.

#include <iostream>
#include <string>

using namespace std;

struct Room {
    int d_noSeat;
    bool d_hasProjector;
    Room() = default;
    Room(const Room& r);
};

class Event {
    Room* d_room;
    std::string d_name;
public:
    Event();
    Event(const Event& e);
    ~Event();
    void set(Room r, const std::string& name);
    void print();
};

Event::Event() : d_room(0), d_name("") {};

void Event::print() {
    std::cout << "Event: " << d_name;
    if (d_room != 0) {
        std::cout << " in size " << d_room->d_noSeat;
        if (d_room->d_hasProjector)
            std::cout << " with";
        else
            std::cout << " without";
        std::cout << " projector";
    }
    std::cout << std::endl;
    return;
}

void printEvent(Event e) {
    e.print();
    return;
}


void Event::set(Room r, const std::string& name) {
    d_room = &r;
    d_name = name;
}

// Room shallow copy constructor
Room::Room(const Room& r) : 
    d_noSeat(r.d_noSeat), 
    d_hasProjector(r.d_hasProjector)
{ }

// Event deep copy constructor
Event::Event(const Event& e) : 
    d_name(e.d_name), 
    d_room(new Room(*e.d_room))
{ }

// Event destructor
Event::~Event()
{
    delete[] d_room;
}


int main() {
    const int noLect = 5;
    Room r;
    Event lectures[noLect];

    for (int i = 0; i < noLect; ++i) {
        r.d_noSeat = i + 1;
        r.d_hasProjector != r.d_hasProjector;
        lectures[i].set(r, "CSI2372");
        lectures[i].print();
    }
    std::cout << "-------------------" << std::endl;
    for (int i = 0; i < noLect; ++i) {
        printEvent(lectures[i]);
    }
    return 0;
}

O erro aparentemente ocorre na linha 52 (primeira linha na função print ()). Além disso, o texto impresso exibe números muito grandes e geralmente negativos. O quê está causando isto?

questionAnswers(2)

yourAnswerToTheQuestion