C++释放动态内存空间问题

int main()
{
    int **a = new int*[2];
    a[0] = new int(1);
    a[1] = new int(2);
    cout << *a[0] << " " << *a[1] << endl;
    delete[] a;
     
    //没有打印
    cout << *a[0] << " " << *a[1] << endl;
    delete a[0];
    delete a[1];

    return 0;
}

给二级指针a申请内存空间,并对a内每个元素的一级指针也申请内存空间,那如果把二级指针a内存释放掉,一级指针内存还存在吗,如果存在怎么释放a[0]和a[1]内存?

知识点:

  1. 分配和释放,可以使用malloc/free,或者new/delete
  2. 内存分配和释放要配对,遵循stack的方式:后入先出

 

问题:

  1. 提问中先执行 `delete[] a;`  再执行 `delete a[0];`
  2. 违背了上述第2点

 

解决:

  1. 调整顺序,把`delete[] a;` 放到`delete a[1];` 之后即可。
  2. 题主问是否有内存泄露检测工具,推荐神器Valgrind: https://www.valgrind.org/
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^