c语言 - 释放错误指针时出错



我在以下代码段中释放 malloc'd 字符串时出现错误:

long authenticate(char* user, long* uid, long* gid){
FILE* fp = fopen("/etc/passwd", "r");
char * line = NULL;
size_t len = 0;
long lineSize;
char* uname;
if (fp == NULL)
  exit(EXIT_FAILURE);
  while ((lineSize = getline(&line, &len, fp)) != -1) {
    uname = (char*)malloc(lineSize*sizeof(char));
    getInfo(line, lineSize, &uname, &uid, &gid);
    if(strcmp(uname, user) == 0) {  // Strings are equal
      printf("we've found a user!n");
      printf("uname: %s uid: %ld gid: %ldn", uname, *uid, *gid);
      free(uname);
      exit(1);
    }
    free(uname);
  }
}

每当我找到一个有效的用户名时,免费uname然后退出什么也没发生。但是,当我在循环结束时尝试释放uname时,当我找不到有效的uname(如果语句未被计算)时,我收到以下错误:

malloc:对象 0x10d20ef2c 的 *** 错误:未分配正在释放的指针

我不明白为什么 free() 没有注册以前是 malloc'd 的uname。鉴于错误的性质,我认为问题是我不了解malloc/free

问题很可能是getInfo()修改了uname指向的位置,之后它不被free()识别。

相关内容

  • 没有找到相关文章

最新更新