[英]C++ delete [] object causes crash
我制作了一個動態的對象數組。 當我調用delete []時,程序崩潰並停止響應。 但它確實有奇怪的行為:調用所有析構函數和崩潰。 看看這段代碼和輸出。 分配所有陣列的所有內存。
//main file
#include "myobject.h"
int size;
myObject *foo;
//some operations to estimate size
foo = new myObject[size];
//some operations with myObject
std::cout<<"size: "<<size<<"\n";
std::cout<<"Deleting object\n";
size=0;
delete [] foo;
下一個文件:
//myobject.h
class myObject
{
public:
int number;
Object1 ob1[64]
Object2 *ob2;
myObject(){ };
~myObject()
{
std::cout<<"delete "<<number<<"\n";
delete [] ob1;
delete [] ob2;
};
}
並輸出:
size: 11
Deleting object
delete 10
delete 9
delete 8
delete 7
delete 6
delete 5
delete 4
delete 3
delete 2
delete 1
delete 0
然后它崩潰並停止響應。
你只能在new[]
返回的指針上調用delete[]
,你必須完成一次。 這同樣適用於delete
和new
。
特別是,你不能delete[] obj1
因為它是內置數組,而不是指針,而obj2
只有當它指向用new[]
分配的未釋放內存時才會delete[] obj1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.