我应该使用Malloc吗?大型对象的错误

Jam*_* MV 1 c++

我正在使用一些在框架上运行的遗留类型代码,因此我无法解释在较低级别上发生的事情,因为我不知道.

但是我的代码创建了一系列目标.

int maxSize = 20;
    myObjects = new Object*[maxSize+1];

    myObjects[0] = new item1(this);
    myObjects[1] = new item2(this);

    for(int i=2; i != maxSize+1; i++){
          myObjects[i] = new item3(this);
        }

    myObjects[maxSize+1] = NULL;
Run Code Online (Sandbox Code Playgroud)

如果maxSize大于30,我会得到一大堆我从未见过的错误.Visual Studio在xutility突出显示中绘制错误:

const _Container_base12 *_Getcont() const
    {   // get owning container
    return (_Myproxy == 0 ? 0 : _Myproxy->_Mycont);
    }
Run Code Online (Sandbox Code Playgroud)

我之前从未使用过Malloc,但这就是问题所在.我应该指定使用它来避免这个问题吗?

das*_*ght 5

绝对值maxSize可能不是罪魁祸首:在任何计算机上分配30个指针应该没有问题,包括大多数微控制器.使用malloc不会改变任何东西:你正在按照你在C++中的方式进行分配.

以下是您错误的可能来源:

myObjects[maxSize+1] = NULL;
Run Code Online (Sandbox Code Playgroud)

您已为maxSize+1项目分配存储空间,因此有效索引位于0和之间maxSize.在最后一个元素之后写一个是未定义的行为,这意味着可能发生崩溃.你很幸运,有20个元素,但30个为你抽出这个bug.使用valgrind实用程序是捕获可能导致崩溃的内存错误的好方法,即使它们当前不会导致崩溃.

int maxSize = 20;
myObjects = new Object*[maxSize+1];

myObjects[0] = new item1(this);
myObjects[1] = new item2(this);

// if maxsize is 1, this loop could be trouble
for(int i=2; i != maxSize; i++){
    myObjects[i] = new item3(this);
}

myObjects[maxSize] = NULL;
Run Code Online (Sandbox Code Playgroud)