每次调用删除后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;
}
答案 0 :(得分:0)
这会调用很多未定义的行为!
delete p
,而p
是数组,因此它应为delete[] p
。q
,一个以数组形式从另一个非数组形式删除。正确的是阵列形式,删除另一个! 现在,回答这个问题。 q[2]
的值2
(由于for
循环)直到q
被删除,当它由于取消引用悬空指针{{}而调用未定义的行为时1}}。
q
的值是p[1][2]
(2
),直到删除p[1] == q
时,由于悬空指针{{1}的derefencing而调用未定义的行为}}