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现在完全理解了。非常感谢您和所有其他人。:)