如果有人可以对以下内容提供一些见解,我将不胜感激:

我有一个Image类。我想为所述类的3个对象动态分配一些内存。我的方法是-

    Image **st0 = new Image*[3];

    for (char j = 0; j<= 2; j++)
    {
         *st0[j].doSomething();
    }


我的想法是(* st0)将指针返回到图像的指针,然后附加在末尾的[]将选择每个连续的图像。但是我收到有关访问未初始化内存的错误。 (访问冲突读取位置0xcdcdcdd1)

当我通过调试器逐步执行此操作时,我看到将st0分配给内存中的某个位置,但是当我进入其中的实体时,它包含0xcdcdcdcd。有什么问题?

最佳答案

Image **st0 = new Image*[3];


这分配了用于存储指向类Image的对象的三个指针的空间。它不会为那些对象分配内存。有两种解决方法:

1)分配一个对象数组:

Image *st0 = new Image[3];


2)分配对象:

Image **st0 = new Image*[3];
for(i = 0; i < 3; i++)
{
    st0[i] = new Image;
}


第一个选项比较简单,而第二个选项则允许您根据需要分配和取消分配Image。哪个更好取决于您程序的其余部分。

关于c++ - 用于创建对象数组的双指针(访问冲突读取位置0xcdcdcdd1),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23038203/

10-10 21:23
查看更多