0

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

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

1 回答 1

2

这意味着代码正在尝试释放未使用 malloc/realloc 分配的内容。就你而言,我认为问题出在

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

应该是

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

可能还想检查 realloc 的结果只是为了形式。请注意,根据定义,我在 sizeof(char) == 1 中简化了你的,并且这些天不应该需要演员表(它曾经是)。David S. 关于释放结果有用性的赞扬也是有效的。

于 2013-01-29T04:18:37.217 回答