首先,我知道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()
调用处。说真的,我在做什么错?这一定是一个逻辑错误,我梳理了
malloc
/ realloc
和new
的四分之一示例,然后阅读并重新阅读了我的教科书,但我看不出有什么问题!我觉得我应该有一行将分配的内存拆分成一个数组,但是
new int[]
调用不是吗? 最佳答案
除了代码中的其他问题外,您还必须执行Joe Gauterin提到的内容并拥有多个手表,或者像这样设置手表:
elements,5
将导致:
我不知道是否有VS2010的更新列表,但这仍然有效:
Symbols for Watch Variables
和:
View array in Visual Studio debugger?
关于c++ - 为什么调试器只显示数组指针中的一个元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9671591/