有人可以解释一下每条线路在这里做了什么。我知道它总共分配了4个空格,但我不明白细节。
int** arrayArray;
arrayArray= new int*[4];
for (int x = 0; x < 4; ++x)
{ arrayArray[x] = new int[4];}
答案 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]
为您指定int
,arrayArray[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表示列号。
所以这个数组的结构就像
取消分配(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空格。