私のコードでは、解放する必要がある多数の 2 次元配列を割り当てています。ただし、ポインタの概念を理解したと思うたびに、期待どおりに動作しないことに驚かされます;)
では、この状況に対処する方法を誰か教えてもらえますか?:
これは、ポインターにメモリを割り当てる方法です。
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 );
}
個人_pHRTFs[i]
の作品を解放すると、最後のステートメントが出力されます__DEBUG
が、最後のステートメントでfree( _pHRTFs )
セグメンテーション違反が発生します。なんで?
気にしない - 最後のデバッグステートメントを追加するfree( _pHRTFs )
と、このコードが実際に機能していて、私の問題が別の場所にあることがわかりました..お時間をいただきありがとうございます!
ジョナス