释放二维数组时的内存问题
Memory issue when freeing 2D arrays
二维数组创建阶段:
int **table = new int*[10];
for (int a = 0; a < 10; a++)
{
table[a] = new int[10];
for(int b = 0; b < 10; b++){
table[a][b] = 0;
}
}
二维数组删除阶段:
for (int i = 0; i < 10; i++)
{
delete [] table[i];
}
delete [] table;
我在使用 GDB 调试我的代码时注意到了一些事情。从 table[0][0] 到 table[0][3] 的所有值都是垃圾,但从 table[0][4] 到 table[ 的所有值都是垃圾0][9]全为0。此题对从table[0]到table[9]的所有指针都有效。
然后我认为GDB有问题,我在屏幕上打印了table[0][0]和table[0][5]。确实 table[0][0] 的值是垃圾, table[0][5] 的值是 0.
我的问题是 c++ 是否真的释放了这些数据?
是的,实际上正在释放数据。如果您在指针的值被释放后取消引用它,您会得到未定义的行为,这可能是它的原始值或其他一些垃圾值。
二维数组创建阶段:
int **table = new int*[10];
for (int a = 0; a < 10; a++)
{
table[a] = new int[10];
for(int b = 0; b < 10; b++){
table[a][b] = 0;
}
}
二维数组删除阶段:
for (int i = 0; i < 10; i++)
{
delete [] table[i];
}
delete [] table;
我在使用 GDB 调试我的代码时注意到了一些事情。从 table[0][0] 到 table[0][3] 的所有值都是垃圾,但从 table[0][4] 到 table[ 的所有值都是垃圾0][9]全为0。此题对从table[0]到table[9]的所有指针都有效。
然后我认为GDB有问题,我在屏幕上打印了table[0][0]和table[0][5]。确实 table[0][0] 的值是垃圾, table[0][5] 的值是 0.
我的问题是 c++ 是否真的释放了这些数据?
是的,实际上正在释放数据。如果您在指针的值被释放后取消引用它,您会得到未定义的行为,这可能是它的原始值或其他一些垃圾值。