我正在使用一些在框架上运行的遗留类型代码,因此我无法解释在较低级别上发生的事情,因为我不知道.
但是我的代码创建了一系列目标.
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,但这就是问题所在.我应该指定使用它来避免这个问题吗?
绝对值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)