我将解释我所做的简要编码步骤以及我面临问题的领域。
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 detected: double free or corruption”错误。
现在我的问题是,我创建了一个字符指针(
char *key =(char*)malloc(sizeof(char) * 25);
),并成功使用malloc为其分配了内存。在完成我的过程后,当我尝试释放该字符指针时,我会收到双重释放或破坏错误。我了解到,使用malloc/calloc分配内存的任何变量都应最终被释放。请告诉我为什么我会遇到这个错误,为什么我不应该这样做?如果可能的话,请告诉我char* key上的内存操作(以图形方式)。注意:上面呈现的代码不是完整的代码,我只是解释了我遇到问题的地方,如果我不释放指针变量,我的应用程序将成功运行。
valgrind
来调试所有这些内存错误。它几乎不会丢失任何信息,输出结果也很易读。 - cgledezma