코드에서 필자는 자유롭게해야 할 2 차원 배열을 할당합니다.C - 포인터에 포인터 놓기
그래서 사람이 어떻게이 상황?
처리하는 말해 줄 수) 그러나, 내가 포인터의 개념을 파악했다고 생각 때마다, 그들은 내가 그들을 기대하고 있지 나를 놀라게 유지 이것은 내가 내 포인터에 메모리를 할당하는 방법입니다
typedef struct HRTF_ {
kiss_fft_cpx freqDataL[NFREQ]
kiss_fft_cpx freqDataR[NFREQ]
int nrSamples;
char* fname;
} HRTF;
HRTF **_pHRTFs = NUL;
int _nHRTFs = 512;
_pHRTFs = (HRTF**) malloc(sizeof(HRTF*) *_nHRTFs);
int i = _nHRTFs;
while(i > 0)
_pHRTFs[--i] = (HRTF*) malloc(sizeof(HRTF));
// Load data into HRTF struct
을 그리고 여기 내가 사용하는 메모리 확보해야한다고 생각하는 방법은 다음과 같습니다개인을 자유롭게
if(_pHRTFs != NULL)
{
__DEBUG("Free mem used for HRTFs");
for(i = 0; i < _nHRTFs; ++i)
{
if(_pHRTFs[i] != NULL)
{
char buf[64];
sprintf(buf, "Freeing mem for HRTF #%d", i);
__DEBUG(buf);
free(_pHRTFs[i]);
}
}
__DEBUG("Free array containing HRTFs");
free(_pHRTFs);
}
을님의 작품에 마지막으로 __DEBUG
문장이 인쇄되었지만 마지막으로 free(_pHRTFs)
이 나에게 세그먼트 오류를 제공합니다. 왜?
Nevermind - 마지막으로 free(_pHRTFs)
뒤에 디버그 문을 추가하면이 코드가 실제로 작동하고 내 문제가 다른 곳에서 발견 된 것으로 나타났습니다. 시간 내 주셔서 감사합니다!
조나스
코드는 정상적으로 보입니다. 당신은 실제로 할당과 자유 사이의 모든 것을 논평 할 수 있고 그것이 아직도 일어나고 있는지 볼 수 있습니까? – cnicutar
char * fname은 어떻게 사용됩니까? 만약 당신이 그것을위한 메모리를 할당한다면, 구조체를 가지고있는 배열을 해제하기 전에 그것을 풀어 놓아야한다. –
코드가 괜찮아 보입니다. malloc의 결과를 C 코드로 캐스팅하지 마십시오. 컴파일러 경고를 통해 다르게 나타날 수있는 오류를 마스크하지 않아도됩니다. –