0

私はObjectiveC関数の中に、これを行う行があります:

    for(int k=0;k<numOfBuffers;k++)
{

 float *temp=getFFT(buffersRing[k],buffersRing[k][0]);
......// do stuff with temp

fft関数は、512個のfloatの配列へのポインタを返します。

float* getFFT(int16_t *q, int bufferL)

私の質問:

  1. *temp何度も何度も定義する関数内で、後でfreeすべての一時ポインターを作成する必要がありますか、それとも自動的にその関数の外に出ますか?
  2. とにかくその機能の内側でこのスペースを解放したい場合for loopは、(コードで...)どうすればいいですか?
4

2 に答える 2

1

ポインターtemp自体は、関数内の自動変数です。関数が終了すると消えます。

tempただし、ポインタが指すメモリは自動的に割り当て解除されません。

getFFT()関数が呼び出し元がメモリを解放することを期待しているかどうかを知る必要があります。これはどちらの方法でも実装でき、示した API からは明確ではありません。

于 2013-02-21T11:53:02.057 に答える
0
  1. はい、temp が指すメモリを明示的に解放する必要があります。そうしないと、メモリ リークが発生します。
  2. temp の宣言をループ外に移動して、それが指すメモリをループ外で解放する必要があります。
于 2013-02-21T11:53:22.847 に答える