0

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

问题是我得到分段错误,我不知道为什么。当我创建对象的新实例时,它会设置一个长度为 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 时,我遇到了分段错误,所以我想知道该代码是否正确,或者它是否在那里崩溃。我已经尝试逐行调试它,但无法判断它是否在那里中断。

4

2 回答 2

1

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

A:那么这个问题从根本上是有缺陷的;)你应该使用向量;)

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

同时 - 您可能通过覆盖“newArr []”而遇到分段错误。如果“used”比长度大很多,“newArr[]”可能太小了。

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

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

于 2013-05-18T03:06:19.173 回答
0

做一个

delete[] items;

在重新分配之前

于 2013-05-18T03:18:00.743 回答