関数にポインター引数を渡していますが、呼び出し元のポインター値と呼び出された関数が異なります。アイデアを与えるために、私は自分の作業コードに似たコードを書いています-
void free_wrapper (char* a) {
printf ("a - %p \n", a);
free (a);
}
main () {
char a [200];
char * c = malloc (sizeof (char)*100); //some 100 bytes;
memset (a, 50, 200);
a [199] = '\0';
/* here I write some data into the alloc'ed memory */
/* instead of writing 100 bytes I go and write beyond the boundaries */;
strcpy (c, a); //explicit use of strcpy
printf ("c - %p \n", c);
free_wrapper (c);
return 0;
}
割り当てられたメモリを破損すると、free_wrapperの前のprintfとfree_wrapperのprintfがポインタに異なる値を出力していることがわかります。
ここで紹介したコードでは問題が発生しない可能性がありますが、作業コードで頻繁に発生します。誰かがスタックの引数として渡された値が破損するさまざまなシナリオのアイデアを私に与えることができますか?
タイプミスで申し訳ありませんが、質問は修正されました。