Я пишу буфер в двоичный файл. Кодекс, как в следующем:C - запись буфера в файл, затем Снятие буфера вызывает segfault
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);
Последний свободный() вызов вызывает у меня ошибки сегментации. После нескольких головных болей я думал, что это, вероятно, потому, что вызов fwrite будет выполняться только после задержки, а затем он будет читать свободную память. Поэтому я добавил вызов fflush, но проблема STILL возникает.
Единственный способ избавиться от него - не освободить память и позволить ОС сделать это для меня. Это должно быть плохой практикой, хотя, поэтому я бы предпочел, нет ли лучшего решения.
Прежде, чем кто-нибудь спросит, да, я проверяю, что файл открыт правильно, и да, я проверяю, что память распределена правильно, и нет, я не касаюсь возвращенных указателей каким-либо образом.
Вы были правы, у меня было переполнение буфера ровно 1 байт, что не имело никакого отношения к вызову free(). Как противно. Спасибо, что указал мне в правильном направлении. – Bregalad