【发布时间】:2016-05-22 21:19:07
【问题描述】:
所以我有一个部分填充的数组,有一组函数可以为它编写。
基本上,数组的行为是这样的。一个整数被添加到下一个可用空间中,当达到容量时,数组加倍和大小,并且所有元素都添加到新的空间中。
+---+---+---+---+
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);
}
我尝试编写的addElement() 函数看起来像这样。
void PFArray::addElement(int elt)
{
if (size == capacity)
{
int *resized = new int[size*2];
capacity = size*2;
for (int i = 0; i < size; i++)
resized[i] = elementData[i];
elementData = resized;
delete [] resized;
}
elementData[size++] = elt;
}
我遇到了两个错误。一,在每一行的开头,一个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_BAD_ACCESS。
如果有人能指出我做错了什么,将不胜感激。仅供参考,我对 C++ 作为一种语言还很陌生。
addElement()的行为如下。
在数组中的下一个可用/空槽插入一个新元素 elt。如果当前数组已达到其容量,则首先创建一个容量为旧数组两倍的数组副本,然后将新元素插入新数组中。您使 elementData 指向新数组(当然)。但是您还必须删除旧数组以避免内存泄漏。您还必须适当地设置容量和大小。
我已尝试包含所有我认为相关的代码,但是如果您需要我提供更多,我也会很高兴!
附:我知道 Vectors,但想将这种方法用于我正在尝试做的事情。
【问题讨论】:
-
除非您的目的只是了解原始数组的工作原理,否则请使用
std::vector,不要浪费时间管理大小/容量等。 -
@SteveFallows 刚刚编辑了帖子说这个,不幸的是我不能使用矢量。
标签: c++ arrays pointers memory