gpt4 book ai didi

c++ - 尝试动态增长静态数组 C++

转载 作者:行者123 更新时间:2023-11-28 07:36:54 25 4
gpt4 key购买 nike

所以我必须在我制作的这个结构中动态增长一个静态数组(我可以使用 vector ,但它特别要求我使用静态数组并复制元素,所以请不要让我使用 vector )。

问题是我遇到了段错误,我不知道为什么。当我创建对象的新实例时,它会设置一个长度为 5 的数组(当前为 5 以进行测试)。然后我在调整数组大小时运行此代码,但它不起作用。

if (used == (length-1)) {
length *= 2;
T* newArr = new T[length];
for (int i = 0; i < used; i++) {
newArr[i] = items[i];
cout << "Copied" << endl;
}
items = newArr;
}

所以它似乎复制到地址到新数组 OK 并且似乎只复制了适当数量的项目。 Used 确定添加了多少项,而 length 保存整个数组的大小。这样当我创建一个新数组时,长度应该是使用的数组的两倍。当我尝试将项目分配给 newArr 时,我遇到了段错误,所以我想知道该代码是否正确或者它是否在那里崩溃。我已尝试逐行调试它,但无法确定它是否在那里中断。

最佳答案

问:“我可以使用 vector ,但它特别要求我使用静态数组并复制元素,所以请不要让我使用 vector ...”

答:那么这个问题存在根本性的缺陷 ;) 你应该使用 vector ;)

如果你真的想取悦你的导师,我鼓励你使用malloc()realloc()free() 而不是“新建”和“删除”;)

与此同时 - 您可能会因为覆盖“newArr[]”而遇到段错误。如果“used”比长度大很多,“newArr[]”可能太小。

只是一个猜测 - 使用调试器会清楚地告诉您到底发生了什么。

问:您使用的是什么编译器和调试器?

关于c++ - 尝试动态增长静态数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16620259/

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