0

when I compile this piece of code, the pointer freed not allocated error pops up. Could someone please explain why that is? Thank you!

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 に答える