我将解释我已完成的简短编码步骤以及我面临问题的区域
主文件
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 指针(char *key =(char*)malloc(sizeof(char) * 25);
)并使用 malloc 成功为其分配了内存。在我尝试释放该 char 指针时完成我的过程后,我得到双重释放或损坏错误。我了解到,任何使用 malloc/calloc 分配内存的变量最终都应该被释放。请告诉我为什么会出现这个错误,为什么我不应该这样做?请告诉我内存操作是如何进行的char* key
(如果可能的话)。
注意:上面显示的代码不是完整的代码,我只是解释了我遇到问题的地方,如果我没有释放指针变量,我的应用程序运行成功。