Calloc 会导致段错误,但不会导致 malloc

标签 c unix malloc calloc

我正在实现一个环形缓冲区,在一种方法中,我在循环中从文件中读取 CHUNKSIZE 字节,并将指针插入到环形缓冲区中。

我在 while 循环中执行此操作。该代码使用 malloc 可以正常工作,但 calloc 会在循环结束时导致段错误。这实在是太神秘了。

这是代码:

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);
}

最佳答案

malloccalloc 之间的唯一区别是 calloc 将内存初始化为 0,而 malloc 则不会不初始化它。

因此,错误可能是您正在访问某处的某些数据,这些数据被 calloc 用 0 覆盖。我建议您检查 b 缓冲区或其他一些动态分配的数据的生命周期。

关于Calloc 会导致段错误,但不会导致 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13990532/

相关文章:

c - 为什么我们要引用变量地址?它的优点是什么?

unix - diff'ing diffs with diff?

c++ - Unix 域套接字 : sending file descriptor and select()

c - 动态分配char数组和int数组的结构

c - C 中的 malloc() 函数

c - 为什么打印我的数组后控制台打印 "null pointer assignment"?

c - 查找长度超过 5 的行数

c - 动态分配的二维数组

c - 在c中通过引用传递int?

c - 将参数传递给 pthread