C++ C++;部分填充动态数组
所以我有一个部分填充的数组,有一组要为它编写的函数 基本上,数组的行为是这样的。一个整数被添加到下一个可用的可用空间中,当达到容量时,数组的大小加倍,所有元素都被添加到新的可用空间中C++ C++;部分填充动态数组,c++,arrays,pointers,memory,C++,Arrays,Pointers,Memory,所以我有一个部分填充的数组,有一组要为它编写的函数 基本上,数组的行为是这样的。一个整数被添加到下一个可用的可用空间中,当达到容量时,数组的大小加倍,所有元素都被添加到新的可用空间中 +---+---+---+---+ elementData | 6 | 2 | 4 | | +---+---+---+---+ +---+ +---+ capacity | 4 | size | 3 |
+---+---+---+---+
elementData | 6 | 2 | 4 | |
+---+---+---+---+
+---+ +---+
capacity | 4 | size | 3 |
+---+ +---+
它就是这样被创造出来的
int ar[5] = {6, 2, 4, 7, 3};
PFArray pf;
cout << "==== Test addElement() ===\n";
for (int i = 0; i < 5; ++i) {
cout << "Insert " << ar[i] << ": ";
pf.addElement(ar[i]);
displayResult(pf);
}
我遇到了两个错误。第一,在每行的开头,将0添加到数组中
==== Test addElement() ===
Insert 6: [0,6,] -- size=2, capacity=2
Insert 2: [0,6,2,] -- size=3, capacity=4
Insert 4: [0,6,2,4,] -- size=4, capacity=4
Insert 7: [0,6,2,4,7,] -- size=5, capacity=8
Insert 3: [0,6,2,4,7,3,] -- size=6, capacity=8
第二,我在elementData[size++]=elt一行中得到一个错误EXC\u BAD\u ACCESS
代码>
如果有人能指出我做错了什么,我将不胜感激。仅供参考,我对C++语言相当陌生。
addElement()
的行为如下所示
在阵列中的下一个可用/空插槽中插入新元素elt。如果当前数组已达到其容量,则首先创建一个容量为旧数组两倍的数组副本,然后将新元素插入新数组中。您可以使elementData指向新数组(当然)。但您还必须删除旧阵列以避免内存泄漏。您还必须适当地设置容量和大小
我已经尝试包含所有我认为相关的代码,但是如果您需要我提供更多,我也会很高兴
另外,我知道向量,但我想用这个方法来做我想做的事情
elementData = resized;
delete [] resized;
在这里,您删除了分配给elementData
的数组,然后对其进行写入:
elementData[size++] = elt;
在这里,您删除了分配给elementData
的数组,然后对其进行写入:
elementData[size++] = elt;
正如Zdeslav所说,您要写入一个已删除的数组。正确的方法是:
delete [] elementData;
elementData = resized;
第一个错误似乎出现在displayResult()代码中,但您没有包含他的代码。正如Zdeslav所说,您写入的是已删除的数组。正确的方法是:
delete [] elementData;
elementData = resized;
第一个错误似乎出现在displayResult()代码中,但您没有包括他的代码。除非您的目的只是了解原始数组的工作原理,否则请使用std::vector
,不要浪费时间管理大小/容量等。@SteveFallows刚刚编辑了这篇文章,不幸的是,我不能使用向量。除非你的目的只是为了了解原始数组如何工作,否则请使用std::vector
,不要浪费时间管理大小/容量等。@SteveFallows刚刚编辑了这篇文章,不幸的是,我不能使用向量。