1

編集: 混乱を避けるために削除された C++ ビット

私はそのようなデータの配列を持っています

int numSamples = 16;
float *lData  = (float*)calloc(numSamples, sizeof(float));

...そして、このデータをこのような定義で関数に渡したいと思います。. .

void processSampleBlock (const float ** inputChannelData,
                         int    numInputChannels,
                         ...)

ご覧のとおり、この関数は複数のチャネルを持つことができる 2D 配列を受け入れます。私のデータは 1 つのチャネル (1D) のみですが、このようなキャストを行うことで、コードを正常にコンパイルできます。.

processSampleBlock ((const float**)(lData),
                            1,
                            ...)

ただし、実行時に不正なアクセス エラーが発生し、関数ブロック内のコードが関数内のデータを逆参照しようとします。.

for (int nn=0; nn< numSamples; ++nn)
{
    float x = inputChannelData[0][nn]; //--> Computer says no
}

私は C スタイルの多次元配列では役に立たず、おそらくここで根本的な誤りを犯しています。どんな助けでも素晴らしいでしょう!ありがとう

4

1 に答える 1

5

行の配列へのポインターを与える必要があるため、1 つの行にその行へのポインターを与えます。

float *data = ...;
processSampleBlock(&data, 1);
于 2012-05-25T10:58:29.297 に答える