在C和NULL指针中重新分配

时间:2014-11-19 12:22:54

标签: c realloc

为什么这个程序不适用于所有输入? (读入输入并以相反顺序打印) Xcode6生成错误消息: hw5(14536,0x7fff7c23f310)malloc: *对象0x100103aa0的错误:没有分配重新分配的指针 * 在malloc_error_break中设置断点以进行调试 不幸的是我不明白这一点。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *input;
  unsigned long long index;
  input = malloc(1);

  for (index = 0; (input[index] = getchar()) != EOF; index++)
  {
    if (input == NULL)
    {
      free(input);
      printf("Error: Out of memory!\n");
      return 0;
    }
    realloc(input, index + 2);
  }

  for (index = index - 1; index != 0; index--)
  {
    putchar(input[index]);
  }
  printf("\n");

  free(input);

  return 0;
}

1 个答案:

答案 0 :(得分:3)

realloc()返回指向新对象的指针。我使用临时变量,因为如果realloc()无法重新分配内存,则返回NULL并且input仍然有效。

char* temp = realloc(input, index + 2);
if( !temp )
{
    //deal with error ...
}

input = temp ;