指针释放未分配

时间:2013-01-29 04:14:06

标签: c pointers malloc

当我编译这段代码时,指针释放未分配的错误弹出。有人可以解释一下为什么会这样吗?谢谢!

static int make_buffer(FILE *input, char *buffer[]){
  *buffer = (char *)malloc(INIT_BUFFER_SIZE*sizeof(char));

  int buffer_size = INIT_BUFFER_SIZE;
  int txt_size = 0;

  char cha;
  while((cha = fgetc(input)) != EOF){
    if (txt_size == buffer_size){
      *buffer = (char *)realloc(buffer, buffer_size*2*sizeof(char));
      buffer_size *= 2;
    }
    (*buffer)[txt_size] = cha;
    txt_size ++;
  }

  free(*buffer);
  return txt_size;
}

1 个答案:

答案 0 :(得分:2)

这意味着代码试图释放未使用malloc / realloc分配的内容。在你的情况下,我认为问题在于

*buffer = (char *)realloc(buffer, buffer_size*2*sizeof(char));

应该是

*buffer = realloc(*buffer, buffer_size*2);

可能还想检查realloc的结果只是为了表单。注意我根据定义简化了你的sizeof(char)== 1,并且这些天不应该使用强制转换(以前是)。 David S.赞扬释放结果的有用性也是有效的。