删除C ++中的指针的指针

问题描述 投票:0回答:1

我有以下代码:

short **A = new short*[A_rows];

for(int i = 0; i < A_rows; ++i) 
     A[i] = new short[n]; 

最后,我要删除此变量,然后执行:

for(int i = 0; i < A_rows; ++i) 
  delete A[i];

delete A;

但是,这样做之后,我仍然可以访问A:

 for(int i = 0; i < A_rows; ++i) 
      for(int j = 0; j < n; ++j) 
         cout << A[i][j] << " ";

如何删除和释放分配给A的内存?

谢谢!

编辑:好的,现在我有:

for(int i = 0; i < Aeq_rows; ++i) 
      delete Aeq[i];

delete[] Aeq;

  for(int i = 0; i < Aeq_rows; ++i)
    for(int j = 0; j < n; ++j)
        cout << Aeq[i][j] << " ";

我不明白为什么我仍然可以打印Aeq的内容?

pointers memory-management delete-operator
1个回答
0
投票

[应该拥有delete a;的时候拥有delete[] A;

但是,这样做之后,我仍然可以访问A:

不,你不知道。那是一个错误,您应该删除试图访问已删除对象的代码。

[当您尝试拒绝您无权访问的权限时,您期望发生什么?无论哪种思维过程导致您得出结论都是错误的。

另一个细节:实际上可能发生的是,您的实现非常高效,并且没有执行不需要做的任何事情。删除对象时需要做的所有事情是,请注意该内存可用于后续分配。这样就完成了。

但是没有理由期望发生任何特别的事情。不需要实现即可以任何特定方式处理。只允许假定您的代码没有错误。

© www.soinside.com 2019 - 2024. All rights reserved.