下面的代码编译,但有错误运行:问题上删除[]当指针数组参与运营商
int main() {
int (*d)[2] = new int[3][2];
// do something
delete [] *d; // this is wrong
delete [] *(d+1); // this is also wrong
//delete [] d; // this works
return 0;
}
我不知道为什么“删除[] * d”不工作,因为* d似乎是一个指向包含2个整数的块的指针,而delete []应该会破坏该块。
此外,由于涉及到二维数组,因此我不确定是否“delete [] d”足以释放所有六个元素。
谢谢!
'删除'你什么'新',只有你'新'。这里的新表达式返回'd',而不是'* d',而不是'*(d + 1)'。 – aschepler
int(* d)[2]'说“'* d'是一个两个整数的数组”。数组不是指针。 – molbdnilo