バッファをバイナリ ファイルに書き込んでいます。コードは次のとおりです。
FILE *outwav = fopen(outwav_path, "wb");
if(!outwav)
{
fprintf(stderr, "Can't open file %s for writing.\n", outwav_path);
exit(1);
}
[...]
//Create sample buffer
short *samples = malloc((loopcount*(blockamount-looppos)+looppos) << 5);
if(!samples)
{
fprintf(stderr, "Error : Can't allocate memory.\n");
exit(1);
}
[...]
fwrite(samples, 2, 16*k, outwav); //write samplebuffer to file
fflush(outwav);
fclose(outwav);
free(samples);
最後の free() 呼び出しにより、ランダムなセグメンテーション違反が発生します。何度か頭を悩ませた後、おそらく fwrite 呼び出しが遅延後にのみ実行され、解放されたメモリが読み取られるためだと思いました。そのため、fflush 呼び出しを追加しましたが、まだ問題が発生します。
それを取り除く唯一の方法は、メモリを解放せず、OS に任せることです。ただし、これは悪い習慣であると思われるため、より良い解決策がないかどうかを尋ねたいと思います。
誰かが尋ねる前に、はい、ファイルが正しく開かれていることを確認します。はい、メモリが適切に割り当てられていることをテストします。いいえ、返されたポインターには一切触れません。