私が行った簡単なコーディング手順と、問題に直面している領域について説明します
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 pointer( char *key =(char*)malloc(sizeof(char) * 25);
) を作成し、malloc を使用してメモリを正常に割り当てたことです。そのcharポインターを解放しようとしたときにプロセスを完了した後、二重解放または破損エラーが発生します。malloc/calloc を使用してメモリに割り当てられた変数は、最終的に解放する必要があることを学びました。このエラーが発生する理由を教えてください。なぜこれを行うべきではないのですか? メモリ操作がどのように進行しているか教えてくださいchar* key
(できれば絵で)。
注: 上記のコードは完全なコードではありません。問題が発生している場所を説明しただけで、ポインター変数を解放していない場合、アプリケーションは正常に実行されています。