gpt4 book ai didi

c++ - 我应该使用 Malloc 吗?大量对象的错误

转载 作者:行者123 更新时间:2023-11-30 00:38:38 26 4
gpt4 key购买 nike

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

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

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;

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

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

我以前从未使用过 Malloc,但这是问题所在。我应该分配使用它来避免这个问题吗?

最佳答案

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

这是您的错误的可能来源:

myObjects[maxSize+1] = NULL;

您已为 maxSize+1 项目分配了存储空间,因此有效索引介于 0maxSize 之间。在最后一个元素之后写入一个是未定义的行为,这意味着可能会发生崩溃。你很幸运有 20 个元素,但 30 个元素为你排除了这个错误。使用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;

关于c++ - 我应该使用 Malloc 吗?大量对象的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com