簡體   English   中英

C ++ delete []對象導致崩潰

[英]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[] ,你必須完成一次。 這同樣適用於deletenew

特別是,你不能delete[] obj1因為它是內置數組,而不是指針,而obj2只有當它指向用new[]分配的未釋放內存時才會delete[] obj1

delete [] ob1;

你沒有new obj1 ; 它是包含在對象中的數組。 刪除未使用new分配的任何內容都會產生未定義的行為,這可能會導致崩潰。

如果你打算像這樣處理指針,那么你需要了解三法則以避免你將遇到的下一個死亡陷阱。 然后了解RAII和智能指針 ,忘掉這個危險的廢話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM