int main(){
int *p=new int[5];
//case 1: delete p;
//case 2: p++;delete[] p;
return 0;
}
如果分別使用案例1和案例2會發生什麼?如果我們在增加指針後刪除數組會發生什麼?
int main(){
int *p=new int[5];
//case 1: delete p;
//case 2: p++;delete[] p;
return 0;
}
如果分別使用案例1和案例2會發生什麼?如果我們在增加指針後刪除數組會發生什麼?
會發生什麼
案例1:未定義行爲。
p
沒有被new
(而是new[]
)調用返回,所以delete p;
是UB。
案例2:未定義的行爲。
p+1
沒有被new[]
調用返回,所以p++;delete[] p;
是UB。
你可以釋放你沒有分配的內存。 你必須調用刪除同一指針值,你回來使用新
不可以。不確定。它可以釋放記憶,它可以做別的事情。 –
我的第二個陳述是正確的。只要將'意志'視爲'可能' –
它可能很大程度上取決於您在編譯期間使用哪個標誌。 – rakwaht
這是未定義的行爲。用'new'刪除[]',用'new'刪除' –