首先,我知道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 / reallocnew的四分之一示例,然后阅读并重新阅读了我的教科书,但我看不出有什么问题!

我觉得我应该有一行将分配的内存拆分成一个数组,但是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/

10-11 17:52
查看更多