c++ - 使用 new() 创建时,我的数组的所有成员都位于相同的内存位置

标签 c++ pointers new-operator

我在构造函数中使用 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/

相关文章:

c++ - 编译器可以生成自修改代码吗?

c++ - 给定一个 T 和函数名称和类型,我该如何解析 T::function?

c++ - 我的 vector 在通过构造函数传递后怎么会发生变化?

c - 如何修复我的代码以清除链接结构中的节点

javascript - 在 Javascript 中使用 new 和不使用它一样吗?

javascript - javascript 中的新运算符和对象

c++ - basic_string.tcc 中的核心转储 - 优化了

c++ - 仅编译器的内存屏障(例如 std::atomic_signal_fence)何时有用?

c++ - 为什么分配的二维 int 数组与普通数组具有不同的内存地址序列?

c++ - 如果 new 抛出 std::bad_alloc 是否会将指针设置为 NULL?