記憶體分配和釋放配對不正確

如果物件只能由 new 分配並且不是陣列,則只能由 delete 釋放。如果 new 的引數未被 new 返回或者是陣列,則行為未定義。

如果物件只能由 new 分配並且是一個陣列,則只能由 delete[] 釋放。如果 delete[] 的引數未被 new 返回或者不是陣列,則行為未定義。

如果 malloc 沒有返回 free 的引數,則行為未定義。

int* p1 = new int;
delete p1;      // correct
// delete[] p1; // undefined
// free(p1);    // undefined

int* p2 = new int[10];
delete[] p2;    // correct
// delete p2;   // undefined
// free(p2);    // undefined

int* p3 = static_cast<int*>(malloc(sizeof(int)));
free(p3);       // correct
// delete p3;   // undefined
// delete[] p3; // undefined

這些問題可以通過完全避免在 C++程式中使用 mallocfree 來避免,更喜歡標準庫智慧指標而不是原始 newdelete,並且更喜歡 std::vectorstd::string 而不是原始的 newdelete[]