Tim*_*ost 17 c gcc memory-leaks
请检查以下代码:
if (foo->bar == NULL);
foo->bar = strdup("Unknown");
Run Code Online (Sandbox Code Playgroud)
我花了三个小时的最后一部分用Valgrind追捕那个漏洞,当我发现这个虚假的时候感觉非常愚蠢';'.
我知道上面的代码是有效的C,但是我希望gcc能够告诉我是否使用条件作为语句.
有没有我可以通过的旗帜,这将有助于在未来发现这种类型的错误?在我看来,gcc将能够知道条件是否无用.
IE:
if (1 == 1);
code_that_is_always_reached_since_conditional_is_a_statement();
Run Code Online (Sandbox Code Playgroud)
这些棉绒也没有问题.Valgrind非常适合找到这些类型的东西..但是泄漏实际上比代码最初分配的位置要晚得多.
任何帮助都表示赞赏,甚至"不,它不会那样做".
编辑:
哇,谢谢你这么快速的回应!总结一下,这是您的选择:
有些人可能会发现-Wextra很烦人.您可以对不同签名的类型进行比较,但是您知道只有在它们相同时才会进行比较.
即
int ret;
unsigned int i;
ret = foo(bar); /* foo() is known to return a signed errno on failure */
if (ret < 0)
return 1;
/* Enter GCC complaining that ret differs in signedness
* (but you know it doesn't and get the urge to cast it) */
for (i = 0; i < ret; i ++)
...
Run Code Online (Sandbox Code Playgroud)
再次感谢您的提示!
Emp*_*ian 32
/* foo.c */
int main() {
if (1) ;
return 0;
}
gcc -Wextra -c foo.c
foo.c: In function ‘main’:
foo.c:2: warning: empty body in an if-statement
Run Code Online (Sandbox Code Playgroud)
深入研究gcc手册后:
-Wempty-body
Warn if an empty body occurs in an `if', `else' or `do while' statement. This warning is also enabled by
-Wextra.
Run Code Online (Sandbox Code Playgroud)
正如其他一些海报所写,-Wextra应该这样做
示例代码:
int main(){
if (0);
printf("launch missiles");
return 0;
}
$gcc -Wempty-body foo.c
warn.c: In function ‘main’:
warn.c:5: warning: suggest braces around empty body in an ‘if’ statement
Run Code Online (Sandbox Code Playgroud)