c - 分段错误和地址清理器
问题描述
我的代码中发生了一些奇怪的事情。我fgets
用来获取文件的每一行,然后strtok
用来解析它。使用 Ubuntu,如果我使用 编译gcc -o name name.c
,它会给我segmentation fault
. 如果我使用 编译-fsanitize=address
,代码运行完美,没有任何 segv。可能是什么问题呢?
代码是:
char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);
但看起来它停在fgets
.
解决方案
可能是什么问题呢?
你的线路
char* input;
只是声明一个指向的指针,char
而不给它分配地址。你认为它会指向哪里?
然后你想
fgets(input, 1000, stdin);
最多 999 个字符,但您永远不会为它们提供空间。
如果将第一行更改为
char input[1000];
它可以在没有分段错误的情况下工作。
推荐阅读
- python - 如何编写一个用于查找范围内所有奇数之和但不使用 if 函数的 for 循环程序
- jackson - 使用 Jackson 使用自定义解串器解组
- javascript - 如何根据一天中的时间更改元素的样式?
- google-api-python-client - Google Earth Engine Python API:地图功能
- spring-data-gemfire - Spring Boot 检测到与 GemFire 的连接丢失
- bash - 脚本在执行时运行,但在获取时失败
- javascript - In a Chrome extension, is it possible to reliably move an extension's popup window off-screen?
- gantt-chart - 如何为甘特单元设置静态宽度
- javascript - GitHub Pages - 显示从列表中随机选择的文本
- reactjs - 为什么 React.useMemo(...) 在我的 React 函数中不起作用?