首页 > 解决方案 > 分段错误和地址清理器

问题描述

我的代码中发生了一些奇怪的事情。我fgets用来获取文件的每一行,然后strtok用来解析它。使用 Ubuntu,如果我使用 编译gcc -o name name.c,它会给我segmentation fault. 如果我使用 编译-fsanitize=address,代码运行完美,没有任何 segv。可能是什么问题呢?

代码是:

char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);

但看起来它停在fgets.

标签: cfgetsstrtoksegmentation-faultaddress-sanitizer

解决方案


可能是什么问题呢?

你的线路

char* input;

只是声明一个指向的指针,char而不给它分配地址。你认为它会指向哪里?

然后你想

fgets(input, 1000, stdin);

最多 999 个字符,但您永远不会为它们提供空间。

如果将第一行更改为

char input[1000];

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


推荐阅读