我正在将缓冲区写入二进制文件。代码如下:
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 调用,但是,问题仍然存在。
摆脱它的唯一方法是不释放内存并让操作系统为我做这件事。不过,这应该是不好的做法,所以我宁愿问是否没有更好的解决方案。
在有人问之前,是的,我检查文件是否正确打开,是的,我测试内存是否分配正确,不,我不会以任何方式触摸返回的指针。