在C ++中由new和delete动态分配

时间:2015-08-28 02:37:14

标签: c++

每次调用删除后q [2]和p [1] [2]的值是多少?并解释一下?

#include <iostream>
using namespace std; int main() {
int **p = new int*[5]; int *q = new int[5];
for (int i = 0; i < 5; i++) {
q[i] = i;
} p[1] = q;
delete p; 
delete q;
delete [] q;
}

1 个答案:

答案 0 :(得分:0)

这会调用很多未定义的行为!

  • delete p,而p数组,因此它应为delete[] p
  • 两个 连续删除q,一个以数组形式从另一个非数组形式删除。正确的是阵列形式,删除另一个!

现在,回答这个问题。 q[2]的值2(由于for循环)直到q被删除,当它由于取消引用悬空指针{{}而调用未定义的行为时1}}。

q的值是p[1][2]2),直到删除p[1] == q时,由于悬空指针{{1}的derefencing而调用未定义的行为}}

顺便说一下,SO 是一个询问如何进行作业的地方!