释放二维数组时的内存问题

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++ 是否真的释放了这些数据?

是的,实际上正在释放数据。如果您在指针的值被释放后取消引用它,您会得到未定义的行为,这可能是它的原始值或其他一些垃圾值。