从非空函数中释放内存

时间:2014-12-09 12:03:46

标签: c malloc

我在释放内存方面遇到了麻烦:

我得到的输出是:

==11073== 1,000 bytes in 1 blocks are definitely lost in loss record 5 of 5
==11073==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==11073==    by 0x400B38: userInput (program.c:80)
==11073==    by 0x400DFD: playGame (program.c:150)
==11073==    by 0x4012E9: main (program.c:298)

我使用的变量是输入和答案,它们是在main之外定义的:

char *answer;
char *input;

我在main中使用的变量'answer'是这样的:

line 150    answer = userInput();

功能如下:

char* userInput()
{
  printf ("> ");

  input = malloc (sizeof(char) * 1000); // THIS is LINE 80
  fgets(input, 1000, stdin);
  //input = realloc(input, strlen(input));

  strtok(input, "\n");

  int i = 0;
  while (i < strlen(input))
  {
    input[i] = tolower(input[i]);
    i++;
  }

  if (strcmp(input, "y") == 0 || strcmp(input, "yep") == 0 || strcmp(input, "yeah") == 0
      || strcmp(input, "absolutely") == 0 || strcmp(input, "correct") == 0)
    input = "yes";

  if (strcmp(input, "n") == 0 || strcmp(input, "nope") == 0)
    input = "no";

  return input;
}

1 个答案:

答案 0 :(得分:6)

你在这里泄漏了内存:

input = "yes";

在这里:

input = "no";

input现在指向一个字符串文字,它之前指向的内存丢失了。