gpt4 book ai didi

c++ - glibc 检测到 : double free or corruption

转载 作者:太空狗 更新时间:2023-10-29 19:46:07 33 4
gpt4 key购买 nike

我将解释我完成的简短编码步骤以及我面临问题的领域

main.cpp

int main()
{
int cnt_map,i=1,value;

/* My question is about this char pointer "key" */
char *key =(char*)malloc(sizeof(char) * 25);

if(key!=NULL)
{
printf("Key value is not NULL,its value is:%x\n",key) ;
cout<< "Enter the number of elements required in container map"<<endl;
cin >> cnt_map;
for (i=1;i<=cnt_map;i++)
{
cout << "Enter the key : ";
cin >>key;
cout << "Enter the key value:" ;
cin >>value;
printf("value pointed by ptr key: %s, value in ptr: %x\n", key,key);
c -> add_map1(key,value); //Function inserts value to map container
key+=sizeof(key);
}
c -> size_map1(); //Function displays size of map container
c -> display_map1(); //Function displays contents of map container
if(key)
{
printf("FINALLY:value pointed by ptr key: %s, value in ptr: %x,size:%d\n",key, key, sizeof(key));
free(key);
}
}
return 0;
}

当尝试编译和运行上述代码时,我能够成功编译代码,但在尝试运行应用程序时出现“检测到 glibc:双重释放或损坏”。

现在我的问题是我创建了一个字符指针(char *key =(char*)malloc(sizeof(char) * 25);)并使用 malloc 成功为其分配内存。在我尝试释放该 char 指针时完成我的过程后,出现双重释放或损坏错误。我了解到任何使用 malloc/calloc 分配的内存变量最终都应该被释放。请告诉我为什么会出现这个错误,为什么我不应该这样做?请告诉我内存操作是如何在 char* key 上进行的(如果可能的话)。

注意:上面给出的代码不是完整的代码,我只是解释了我遇到问题的地方,如果我没有释放指针变量,我的应用程序运行成功。

最佳答案

这样做:

key+=sizeof(key);

您的 key 变量不再指向您分配的内存的开头。您必须将原始指针传递给 free()。您需要将原始指针存储在另一个变量中,以便您可以在最后正确地 free() 它。

(您可以简单地删除该行 - 我不确定它在做什么,因为 sizeof(key) 是 4 或 8。我怀疑它是多余的。)

关于c++ - glibc 检测到 : double free or corruption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343832/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com