首先:我知道new
是这样做的C++方法。我只是表明,有不止一种方法来重现这个错误,而且都令人难以置信地令人沮丧。为什么调试器只显示我的数组指针中的一个元素?
我有这种源文件的两种形式。我正在尝试调试另一个编程任务,但我并没有要求帮助。基本上,我试图重新实施set
作为一个类与字段的大小和指针int
阵列。下面是使用new
代码:
testnew.cpp
int main()
{
int size = 1;
int *elements = new int[size];
elements[0] = 0;
size++;
int * temp = new int[size];
for (int i = 0; i < (size - 1); i++)
{
temp[i] = elements[i];
}
delete[] elements;
temp[size] = size;
elements = temp;
elements[1] = 1;
delete[] elements;
}
,并再次使用,最好少alloc
功能:
testalloc.cpp
int main()
{
int size = 1;
int * elements = (int *) malloc(sizeof(int) * size);
elements[0] = 0;
size++;
elements =(int *) realloc(elements,size * sizeof(int));
elements[1] = 1;
free(elements);
}
在这两种情况下,我目标是创建一个数组,然后追加到它。但是,在这两种情况下,在Visual Studio 2010中构建并运行它之后,阵列根本不会生长,并且只有1个“插槽”用于我的项目进入。在VS的调试器中,我有elements
数组指针;附上的是一个截图。这两个版本的代码都是一样的。
- 断点处于delete[]
/free()
通话。
说真的,我做错了什么?这必须是一个逻辑错误,我已经梳理了12个例子,包括malloc
/realloc
和new
,并阅读并重新阅读我的教科书,我看不出有什么问题!
我觉得我应该有一条线将分配的内存拆分成一个数组,但不是new int[]
这样做?
啊!诅咒零索引。那最终成了我的问题,我知道这是事实,但我对调试器的经验不足让我失望。 – Tasuret 2012-03-12 17:32:38