假设在我的代码中我使用类似这样的东西
OK
现在我没有给指针分配任何地址。所以在gcc中有任何选项可以显示这个错误。
我尝试过优化,但没有给出这个错误。
我尝试了-fsanitize = address但是它在运行时出错了
== 1982 ==错误:AddressSanitizer:SEGV在未知地址0x000000c38299(pc 0x7f78d7b685b0 sp 0x7ffd8918a0b0 bp 0x7f78d7d7a668 T0)
或者我有什么方法可以将这个o / p写入文件
答案 0 :(得分:3)
打开编译器警告有很大帮助。良好的警告级别(恕我直言)是-Wall
。
我把你的示例代码放在一个程序中,k.c:
#include<stdio.h>
int main()
{
int iLen = 0;
char *sTmpStr;
strcpy(sTmpStr, "abc");
return 0;
}
编译给出了以下警告:
$ gcc -Wall k.c -o k
k.c: In function 'main':
k.c:11: warning: unused variable 'iLen'
k.c:14: warning: 'sTmpStr' is used uninitialized in this function
$
您可以通过添加标记-Werror
答案 1 :(得分:0)
仅使用编译器通常不足以查找运行时错误和指定不当的行为。 gcc -std=c11 -pedantic-errors -Wall
是一个好的开始,但gcc仍然只是一个编译器,编译器的目的是检查代码是否按标准的要求编写。除此之外的任何事情都只是奖励。
专业选项是使用静态代码分析工具。这些将检查代码中的常见错误和问题。不幸的是,没有这样的工具作为开源存在:它们往往相当昂贵。