例コード:無効な読み取り/書き込み時にセグメンテーションフォールトを作成し、時にはない
int main()
{
char b[] = {"abcd"};
char *c = NULL;
printf("\nsize: %d\n",sizeof(b));
c = (char *)malloc(sizeof(char) * 3);
memcpy(c,b,10); // here invalid read and invalid write
printf("\nb: %s\n",b);
printf("\nc: %s\n",c);
return 0;
}
私はいくつかの不正な読み取りや無効な書き込みが、この小さなプログラムが正常に動作して作成されません行っているコードで参照してください。 a core dump
。
私の大きなライブラリでは、1バイトの無効な読み取りまたは無効な書き込みを行うたびに、常にコアダンプを作成していました。
質問:
なぜ私は時々、無効な読み取り/書き込みからコア・ダンプを取得しないと、時々コアダンプを得ることはありませんか?
+1、そうです。 'c'にあるメモリはヒープ上にあり、' b'はスタック上にあります。だからこの状況では、あなたはヒープをあふれている。良いキャッチ。 ;) –