동적으로 할당 된 배열을 삭제하는 데 약간의 문제가 있습니다. 이유는 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;
프로그램 완료시 segfault 후 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-three). 벡터를 사용하십시오. – chris
코드를 공유하십시오. –
@chris. 그래, 내가 여기서 할 수있어. 그러나 실제로 이것은 일어나서는 안됩니다. –