Я реализую кольцевой буфер, и в одном методе я читаю CHUNKSIZE
байт из файла в цикле и вставляю указатель в кольцевой буфер.
Я делаю это в цикле while. Код отлично работает с malloc
, но calloc
вызывает segfault в конце цикла. Это действительно загадочно.
Вот код:
fpos_t position = 0;
fpos_t file_size = 0;
fseek(file, 0L, SEEK_END);
fgetpos(file,&file_size);
fseek(file, 0L, SEEK_SET);
char* b = calloc(CHUNKSIZE,sizeof(char));
// char* b = malloc(sizeof(char)*CHUNKSIZE);
while(fread(b,1,CHUNKSIZE,file)){
deposit(reader_buf,b);
// This always changes the cursor position by -150 to create overlapping chunks
fseek(file,-150,SEEK_CUR);
b = calloc(CHUNKSIZE,sizeof(char));
// b = malloc(sizeof(char)*CHUNKSIZE);
}
CHUNKSIZE
? Что делает deposit() с буфером, на который указывает b? Обратите внимание, что это одна большая утечка памяти, поскольку вы никогда не освобождаете b. - person Jens   schedule 21.12.2012deposit
. В любом случае вы не показываете нам достаточно, чтобы что-то сказать. Но кроме того, этот тип вопросов не очень подходит для SO, это не сайт для проверки кода, а сайт для технических вопросов и ответов. - person Jens Gustedt   schedule 21.12.2012CHUNKSIZE
равно 1000, но я думаю, что это не имеет значения. b освобождается в другом потоке. Это не было задумано как обзор кода, я просто подумал, что упустил какую-то разницу междуcalloc
иmalloc
- person muxamilian   schedule 21.12.2012