繁体   English   中英

释放malloc指针时出错

[英]Error while freeing a malloc'd pointer

在以下代码中释放malloc的字符串时出现错误:

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: %ld\n", uname, *uid, *gid);
      free(uname);
      exit(1);
    }

    free(uname);
  }
}

每当我找到有效的用户名时,都可以使用uname ,然后退出,则什么也没有发生。 但是,当我在循环末尾尝试释放uname时,如果找不到有效的uname (如果语句未得到评估),则会收到以下错误:

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

我不明白为什么free()不能注册先前被malloc分配的uname 考虑到该错误的性质,我相信问题是我不了解有关malloc / free

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM