我有一个动态分配二维数组的代码,将其用于某些计算,然后将其放入堆栈上名为 result 的变量并释放二维数组。我想知道为什么这会起作用,以这种方式而不是拥有一个可以稍后释放的全局二维数组是一种很好的编程习惯吗?
{
int *matrix = new int[5];
for(row = 0; row<array_size+1;row++)
{
subSolution[row] = new (nothrow) int[request+1];
if(subSolution[row] == NULL)
return -1;
}
//do some stuff
result = subSolution[1][request];
for(row = 0; row<array_size+1; row++ )
delete [] subSolution[row];
delete [] subSolution;
return result;
}
谢谢
最佳答案
没有魔法 )) 您制作了数组中一个元素的拷贝。现在您可以修改数组甚至删除它...您的拷贝 将是永久性的。但是如果你将一个指针保存到数组的一个元素,然后删除一个数组,你就会遇到麻烦:
int * pElement = & matrix[ i ][ j ];
deleteMatrix();
int x = *pElement; // bad
关于C++ 存储在堆上保存在堆栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16411781/