【发布时间】:2019-09-07 18:27:32
【问题描述】:
我的代码中发生了一些奇怪的事情。
我使用fgets 获取文件的每一行,然后使用strtok 解析它。使用 Ubuntu,如果我使用 gcc -o name name.c 编译,它会给我 segmentation fault。如果我使用-fsanitize=address 编译,代码运行完美,没有任何segv。可能是什么问题?
代码是:
char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);
但它似乎停在fgets。
【问题讨论】:
-
地址清理程序只能检测某些类型的未定义行为。启用 ASAN 还可以修改生成的代码,使 UB 不再触发分段错误。因此需要minimal reproducible example 来更具体地回答。
-
好的,我使用 char* 输入; fgets(输入,1000,标准输入); tok=strtok(输入,pars);但看起来它停在 fgets
-
那不是minimal reproducible example。请再次阅读链接并确保您的示例代码完整且可重现。
-
欢迎来到 Stack Overflow。请尽快阅读About 页面并访问描述How to Ask a Question 和How to create a Minimal, Complete, and Verifiable example 的链接。提供必要的详细信息,包括您的代码、编译器警告和相关错误(如果有),将允许这里的每个人帮助您解决问题。
标签: c fgets strtok segmentation-fault address-sanitizer