C の最後の行を書いてからしばらく経ちましたが、現時点では C のコツをつかむのに問題があります。これはおそらく私が犯しているばかげた間違いだと思いますが、しばらく問題を調査した後でも、何が間違っているのかわかりませんでした。だから、これは私のコードがどのように見えるかです:
int read_signal_from_file(const char* path, float* signal, SF_INFO * info) {
SNDFILE *sndFile;
sndFile = sf_open(path, SFM_READ, info);
signal = malloc(info->frames * sizeof(float));
long numFrames = sf_readf_float(sndFile, signal, info->frames);
...
}
と
int main(int argc, char *argv[]) {
float** signals = malloc(NUM_FILES * sizeof(float*));
float avg = 0.0;
SF_INFO tmp_info;
for(int i = 0; i < NUM_FILES; i++) {
read_signal_from_file(INPUT_FILES[i], signals[i], &tmp_info);
for(long j = 0; j < tmp_info.frames; j++) {
printf("Sample no #%ld: %f\n", j, signals[i][j]);
}
}
}
内部ではread_signal_from_file()
、割り当てられたメモリ部分に問題なくアクセスできます。しかし、メイン関数のスコープからアクセスしようとするとすぐに (たとえば、上記の printf() の例のように)、初期化されていないメモリまたはオーバーフローのように疑わしい破損した結果が得られます。そのデータを操作しようとすると、 、(たとえば、 を呼び出すvDSP_meanv()
と、アプリケーションはセグメンテーション違反でクラッシュします。