删除动态分配的数组时遇到一些麻烦,我不是 100% 确定原因。我对这个数组做的唯一一件事是在另一个例程中单独复制一些值(在 for 循环中),该例程已验证正常工作。
这是类中的声明:
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)
我一直盯着这个有一段时间了,我没有想法。我想我会转向蜂巢思维。如果您想了解更多信息,请告诉我。谢谢!
编辑:我将所有内容更新为基于矢量和矢量* 的方法。
没有段错误:)。
然而,为了从中产生某种“获得的知识”,在另一堂课中,我称之为:
std::complex<float> * frameGet;
frameGet = this->Frame->getFrame();
// Do stuff with frameGet
//THIS NEXT LINE IS THE BAD PART
delete[] frameGet;
一半的问题,一半的断言:delete[] frameGet 调用删除原始数组内容?如果 frameGet 需要被删除,应该执行以下操作:
frameGet = NULL;
delete frameGet;