2016-04-17 15 views
-2

誰かが2回連続でフリーズするとクラッシュするのですが、最初にフリーズしてからbをフリーズしてからもう一度クラッシュしない理由を説明できますか?ダブルフリー - クラッシュまたはクラッシュなし

私はフリーでダブルリンクフリーリストにヒープチャンクを挿入することを知っています。 2回解放すると、同じチャンクが空きリストに2回挿入されます。しかし、なぜクラッシュが起こっていますか?

int *a = malloc(8); 
int *b = malloc(8); 

free(a); 

// free(a); //Would crash! 

free(b); 

free(a); //No crash 
+0

Infosecはおそらくこの質問に最も適切なフォーラムではありません。 StackOverflowを検討してください。 –

+0

なぜそれは常にクラッシュすべきですか? 「int a [5]」でも。 a [10] = 100;は常にクラッシュするとは限りません。 – immibis

+0

_undefined behaviour_が何であるかを学びます。あなたは結局それを複数回会うでしょう。 – Olaf

答えて

4

Cの専門用語では、未定義の動作はまさにそれですので:未定義。何かが起こるかもしれません。 free(ptr)が既に未定義の動作が発生し、以前に呼び出されている場合

[...]:

またman 3 freeを参照してください。

関連する問題