[英]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.