C++ 未分配要释放的指针?
请告诉我第三线在做什么C++ 未分配要释放的指针?,c++,pointers,C++,Pointers,请告诉我第三线在做什么 int main(){ int *p = new int[3]; *p++=0; // What's this line doing? delete p; return 0; } 您正在将p[0]设置为0,并将指针前进到p[1]。您想做什么?您正在将p[0]设置为0,并将指针前进到p[1]。你想做什么?*p++=0表示: 将sizeof(int)零字节写入存储在p中的地址 将p的值增加sizeof(int) 换句话说,您增加了指针,然后传递给delete的
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
您正在将p[0]设置为0,并将指针前进到p[1]。您想做什么?您正在将p[0]设置为0,并将指针前进到p[1]。你想做什么?
*p++=0代码>表示:
将sizeof(int)
零字节写入存储在p
中的地址
将p
的值增加sizeof(int)
换句话说,您增加了指针,然后传递给delete
的内容与操作员new[]
返回的内容不同
正如@FredLarson也提到的,您必须使用delete[]p代码>以删除阵列
另外,我建议您阅读指针、指针算术和前后增量。从我们的网站中选择一本书。*p++=0代码>表示:
将sizeof(int)
零字节写入存储在p
中的地址
将p
的值增加sizeof(int)
换句话说,您增加了指针,然后传递给delete
的内容与操作员new[]
返回的内容不同
正如@FredLarson也提到的,您必须使用delete[]p代码>以删除阵列
另外,我建议您阅读指针、指针算术和前后增量。从我们的列表中选择一本书。数组中的第一个元素设置为0,p前进一步以指向第二个元素
delete p; // this has undefined behaviour
使用delete[]p代码>取而代之 数组中的第一个元素被设置为0,p向前移动1以指向第二个元素
delete p; // this has undefined behaviour
使用delete[]p代码>取而代之 你应该更关心那条线后面的那条线,它在干什么?它正在调用可怕的未定义行为。为鼻魔的高风险做好准备。你应该更关注那条线后面的那条线。它在做什么?它正在调用可怕的未定义行为。为鼻魔的高风险做好准备。即使指针值正确,也应该是delete[]p代码>。非常感谢。你是对的。我不明白增量和赋值的顺序…好吧,现在你已经走了那么远。8v)我自己去睡觉了。@arch1ect:这是post increment。它表示使用变量后的-增量。因此,增量肯定会在取消引用后发生。@VladLazarenko现在完全理解了。非常感谢您和所有其他人。:)即使指针值正确,也应该是delete[]p代码>。非常感谢。你是对的。我不明白增量和赋值的顺序…好吧,现在你已经走了那么远。8v)我自己去睡觉了。@arch1ect:这是post increment。它表示使用变量后的-增量。因此,增量肯定会在取消引用后发生。@VladLazarenko现在完全理解了。非常感谢您和所有其他人。:)