c ++ 2D数组分配

时间:2016-01-10 03:54:37

标签: c++

有人可以解释一下每条线路在这里做了什么。我知道它总共分配了4个空格,但我不明白细节。

        int** arrayArray; 
        arrayArray= new int*[4];
        for (int x = 0; x < 4; ++x)
        { arrayArray[x] = new int[4];}

2 个答案:

答案 0 :(得分:3)

你的数组是一个二维数组,所以它的大小是“x by y”的形式。您的数组包含的总int将是x * y。我将x作为行号,y作为列号。

您似乎需要一个总共4 int s的数组,因此您的行号和列号的乘积应为4,例如2x2。请记住,以下答案是处理4x4阵列,总共有16个int s。

<强>分配

int** arrayArray;

该行欺骗变量arrayArray,它是(int的指针)的指针。像

(arrayArray) -> * -> int

因此arrayArray[0]为您指定intarrayArray[0][0]因此会为您提供int(位于数组中)。

arrayArray = new int*[4];

此行分配一个可包含4个int指针的空格,并将arrayArray设置为指向该空格(不要忘记arrayArray指针指针int 。)。

此处4表示行号。

for (int x = 0; x < 4; ++x)
    arrayArray[x] = new int[4];

对于arrayArray中的每个指针,将其设置为指向4 int s的空格。

此处new int[4]中的4表示列号。

所以这个数组的结构就像

Visualized image

取消分配free):

请注意,{self}的arrayArray只是指向另外4个指针的指针。如果你想释放整个数组,你不仅要释放4个指针的空间。您需要释放这些指针指向的每个空间,否则会导致内存泄漏。例如,你想要释放整个数组,它只是分配的反向,首先释放所有空间arrayArray指向:

for (int x = 0; x < 4; ++x)
    delete[] arrayArray[x];

在C ++中,如果您想delete new something[]分配的空格,则需要delete[]而不是delete

然后释放阵列本身:

delete[] arrayArray;

答案 1 :(得分:0)

int** arrayArray; 
arrayArray= new int*[4];

上面的代码初始化了4个可以保存4 int*

指针的位置

接下来的几行为每个int*分配4个int空格,因此总共4 * 4 = 16个整数空格。

for (int x = 0; x < 4; ++x)
{ arrayArray[x] = new int[4];}

现在根据您的评论,您只需要4个整数空格。这意味着你的2d阵列将是2x2。

因此,您的代码应该类似于:

int** arrayArray; 
arrayArray= new int*[2];
for (int x = 0; x < 2; ++x)
{ arrayArray[x] = new int[2];}

这样,您只能分配2个int*位置和2个可以指向的int空格。

相关问题