在调试崩溃时,我在一些代码中遇到了这个问题:
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)
可能会崩溃。
我希望/希望这将被视为与在 C++ 中相同的方式,其中编译器不允许 goto 跳过初始化。
我的问题是:跳过标准允许的初始化还是 gcc 的 c99 实现中的错误?