我有以下代码:
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的内容?
[应该拥有delete a;
的时候拥有delete[] A;
。
但是,这样做之后,我仍然可以访问A:
不,你不知道。那是一个错误,您应该删除试图访问已删除对象的代码。
[当您尝试拒绝您无权访问的权限时,您期望发生什么?无论哪种思维过程导致您得出结论都是错误的。
另一个细节:实际上可能发生的是,您的实现非常高效,并且没有执行不需要做的任何事情。删除对象时需要做的所有事情是,请注意该内存可用于后续分配。这样就完成了。
但是没有理由期望发生任何特别的事情。不需要实现即可以任何特定方式处理。只允许假定您的代码没有错误。