为什么调试器只显示我的数组指针中的一个元素?

Tas*_*ret 2 c++ malloc visual-studio-2010 new-operator

首先:我知道这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;
}
Run Code Online (Sandbox Code Playgroud)

再次,使用不太优选的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);
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我的目标是创建一个数组,然后附加到它.但是,在这两种情况下,在Visual Studio 2010中构建和运行它之后,阵列根本不会增长,并且只有1个"槽"供我的项目进入.在VS的调试器中,我监视elements数组指针; 附件是截图.两个版本的代码都是一样的.

我的手表在节目结束时

- 断点位于delete[]/ free()call.

说真的,我做错了什么?这必须是一个逻辑错误,我已经通过两者的后腰打法的例子梳理malloc/ reallocnew,以及阅读和重新阅读我的书,我看不出有什么不对!

我觉得我应该有一条线将分配的内存分成一个数组,但是new int[]调用不是这样做的吗?

cra*_*str 5

除了代码的任何其他问题,您必须要么做Joe Gauterin提到并拥有多个手表,或者设置这样的手表:

elements,5
Run Code Online (Sandbox Code Playgroud)

将导致:

在此输入图像描述

我不知道是否有VS2010的更新列表,但这仍然有效: Watch Variables的符号
和: Visual Studio调试器中的View数组?