クラッシュのデバッグ中に、いくつかのコードでこの問題に遭遇しました。
int func()
{
char *p1 = malloc(...);
if (p1 == NULL)
goto err_exit;
char *p2 = malloc(...);
if (p2 == NULL)
goto err_exit;
...
err_exit:
free(p2);
free(p1);
return -1;
}
この問題は、最初の malloc が失敗したときに発生します。の初期化にジャンプするためp2
、ランダム データが含まれ、 への呼び出しfree(p2)
がクラッシュする可能性があります。
これが、コンパイラーが goto が初期化を越えてジャンプすることを許可しない C++ と同じように扱われることを期待/希望します。
私の質問: 標準で許可されている初期化を飛び越えていますか、それとも gcc の c99 実装のバグですか?