Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;部分填充动态数组_C++_Arrays_Pointers_Memory - Fatal编程技术网

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刚刚编辑了这篇文章,不幸的是,我不能使用向量。