C 分段错误和地址消除器

C 分段错误和地址消除器,c,fgets,strtok,segmentation-fault,address-sanitizer,C,Fgets,Strtok,Segmentation Fault,Address Sanitizer,我的代码中发生了一些奇怪的事情。 我使用fgets获取文件的每一行,然后使用strtok解析它。使用Ubuntu,如果我使用gcc-o name.c编译,它会给我分段错误。如果我使用-fsanize=address进行编译,那么代码在没有任何segv的情况下运行良好。有什么问题吗 代码是: char* input; fgets(input, 1000, stdin); tok=strtok(input, pars); 但它似乎在fgets停止 有什么问题吗 你的线路 char* input;

我的代码中发生了一些奇怪的事情。 我使用fgets获取文件的每一行,然后使用strtok解析它。使用Ubuntu,如果我使用gcc-o name.c编译,它会给我分段错误。如果我使用-fsanize=address进行编译,那么代码在没有任何segv的情况下运行良好。有什么问题吗

代码是:

char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);
但它似乎在fgets停止

有什么问题吗

你的线路

char* input;
只声明一个指向char的指针,而不为其分配地址。你认为它会指向哪里

那你想

fgets(input, 1000, stdin);
最多999个字符,但您从未为它们提供空间

如果您将第一行更改为

char input[1000];

它将在没有分段错误的情况下工作。

地址消毒器只能检测某些类型的未定义行为。启用ASAN还可以修改生成的代码,使得UB不再触发分段故障。因此,需要一个更具体的答案;fgetsinput,1000,标准输入;tok=标准输入,PAR;但它看起来像是停在FGETS那不是一个。请再次阅读链接,确保示例代码完整且可复制。欢迎使用堆栈溢出。请尽快阅读该页面,并访问描述和的链接。提供必要的详细信息,包括您的代码、编译器警告和相关错误(如果有),这里的每个人都可以帮助您解答问题。