动态数组仅分配一个元素

时间:2016-12-01 22:36:16

标签: c++ arrays visual-studio

我已经搜遍过,但没有找到任何相关内容。

我有以下简单的代码:

#include<iostream>

using namespace std;

int main() {
int *newArray;
int size;

cout << "enter size: ";
cin >> size;
newArray = new int[size];

cin.get();
return 0;

出于某种原因,无论输入的数字是多少,动态数组始终只分配一个元素。我没有得到任何编译器错误或运行时错误(除阵列问题)。我也试过

int *newArray;
newArray = new int[100];

const int SIZE = 100;
int *newArray;
newArray = new int[SIZE];

我得到了相同的结果。 我正在使用Visual Studio Community 2015作为我的IDE,如果它有所作为。 如果有人有任何指示(没有双关语)请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

newArray不是数组,它只是指向内存中某个位置的指针。它不包含许多元素,它只是内存中的一个地址。执行newArray = new int[n]时,将分配sizeof(int)*n个字节的内存,并将此分配空间的地址保存在newArray中。

Visual Studio只知道newArray是指向int的指针。所以它只显示该地址的一个数字。它无法知道在那里分配了多少内存。

如果您想查看超过第一个int的内容,请打开内存视图,输入newArray作为地址,将其设置为显示int。您将看到普通内存被解释为整数,因此您将看到数组中的数字。但是这些int将不会结束。在您的号码之后,会有垃圾。

尝试的另一个选项(我不确定它是否有效)是将(int[100])newArray添加到Watch窗口。

因此分配了内存,随时可以编写和阅读内存,不要忘记delete[]内存。