1

ドラム シーケンスの各サブディビジョンを 2 次元配列内の個別の配列 (サブディビジョンの行、各サブディビジョンのデータの列) に分割しようとしています。コードの早い段階で、テンポと目的のサブディビジョンに関するユーザー仕様を使用して、サブディビジョンあたりのサンプル数を決定します。サンプルで入力ファイルのサイズを計算するためのある程度合理的な方法があると思います (最初のセクションを示します)。私の質問は: そのままでは、sf_read_double while ループは実行されません。ループが実行されるのは、「buflen」に 2 (おそらくチャネル数) を掛けたときだけです。そして、ループが実行されると、計算されたサンプルの総数を超えてしまい、sug フォルトが発生します。このコードで何が間違っていますか?

double framesArray[sfinfo.frames];
int numframes = (sizeof(framesArray)/sizeof(double));
int totalSamps = numframes * sfinfo.channels;
int totalSubdivisions = totalSamps / sampsPerSubdivision;
int buflen = sampsPerSubdivision;


int i;
double** choppeddata = (double**) malloc(totalSubdivisions * sizeof(double**));
for (i = 0; i < totalSubdivisions; i++)
    choppeddata[i] = (double*) malloc(buflen * sizeof(double*));
double* buffereddata = (double*) malloc(buflen * sizeof(double*));
double* outdata = (double*) malloc(totalSamps * sizeof(double*));

int j = 0, k = 0, sampnum = 0;
while ((readcount = sf_read_double (infile, buffereddata, buflen)))
{
    for (k = 0; k < buflen; k++)
    {
        choppeddata[j][k] = buffereddata[k];
        sampnum++;
    }

    j++;                                                                                
}
4

1 に答える 1