刪除一個動態分配的數組時遇到了一些麻煩,我不是100%確定原因。我對這個數組做的唯一的事情就是單獨複製一些值(在一個for循環中),在另一個例程中進行驗證,以驗證它是否正常工作。從刪除動態數組中刪除Seg錯誤
下面是類的聲明:
std::complex<float> * frameData;
實例中構造:
this->frameData = new std::complex<float>[n];
srand(time(NULL));
std::complex<float> randUnityRoot;
for(int i = 0; i < this->n; i++){
randUnityRoot = std::polar(1.0, 2*M_PI * (rand() % 1000000)/1e06);
this->frameData[i] = randUnityRoot;
}
缺失析構函數(這是在回溯中提到的管線70):
delete[] this->frameData;
程序完成後段錯誤後的gdb回溯:
(gdb) f 4
#4 0x00007ffff7bc579c in Frame::~Frame (this=0x602940,
__in_chrg=<optimized out>) at Frame.cpp:70
70 delete[] this->frameData;
(gdb) f 3
#3 0x00007ffff7669b96 in ??() from /lib/x86_64-linux-gnu/libc.so.6
(gdb) f 2
#2 0x00007ffff765f39e in ??() from /lib/x86_64-linux-gnu/libc.so.6
(gdb) f 1
#1 0x00007ffff7624b8b in abort() from /lib/x86_64-linux-gnu/libc.so.6
(gdb) f 0
#0 0x00007ffff7621425 in raise() from /lib/x86_64-linux-gnu/libc.so.6
(gdb)
我一直在盯着這一段時間,並沒有想法。我想我會轉向蜂巢的想法。如果您想了解更多信息,請告訴我。謝謝!
編輯:我更新了一切以矢量和矢量*爲基礎的方法。
沒有segfaults :)。
要從此但是產生某種「獲得的知識」,另一類我曾要求是這樣的:
std::complex<float> * frameGet;
frameGet = this->Frame->getFrame();
// Do stuff with frameGet
//THIS NEXT LINE IS THE BAD PART
delete[] frameGet;
一半的問題,一半斷言:刪除[] frameGet電話上原來陣列的內容刪除?如果frameGet需要刪除應該這樣做:
frameGet = NULL;
delete frameGet;
可能相關:[Rule of Three](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-reeree)。使用矢量。 – chris 2013-03-01 05:28:17
請分享代碼。 – 2013-03-01 05:34:36
@chris。是的,我想我可以在這裏做到這一點。但實際上,這不應該發生。 – 2013-03-01 05:35:41