我在构造函数中使用 new 创建了一个指向“Timeslot”对象的 7×7 指针数组,如下所示:
Timeslot ***schedule;
Schedule::Schedule(void)
{
schedule = new Timeslot**[DAYS]();
for(int day = 0; day < DAYS; day++){
schedule[day] = new Timeslot*[TIMESLOTS]();
for(int time = 0; time < TIMESLOTS; time++){
schedule[day][time] = new Timeslot();
}
}
}
当我编辑一个时隙对象时,所有对象都会发生变化。我试图用谷歌搜索这个问题,但我能找到的所有实例都是没有使用 new
的人。
自从我被问到后,我对传播给所有对象的时隙对象所做的更改是我使用 Timeslot 类的方法在位掩码中标记了一点。
void Timeslot::book(int instructor){
bitmask = bitmask | instructormasks[instructor];
}
自从发布这个问题后,我发现是的,每个时隙对象都获得了自己唯一的内存地址,而且位掩码以某种方式在所有对象中都被标记了。我现在正在调查。
最佳答案
这里有缓冲区溢出:
for (int day = 0; day <= DAYS; day++)
schedule[day] = // rest of code
这里
for(int time = 0; time <= TIMESLOTS; time++)
schedule[day][time] = //rest of code
这可能是您遇到问题的原因。
关于c++ - 使用 new() 创建时,我的数组的所有成员都位于相同的内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007634/