我正在使用c字符串库的strlen函数。我传递了NULL 字符串,并发现了神秘的结果。我知道我不应该传递NULL字符串,但需要对此进行解释。代码看起来像这样 通用标签

在我的gcc编译器上,带有注释后运行良好。 但是如果您要删除该行中的评论 遗传标记代码

它产生分段错误。 有什么解释吗?

有帮助吗?

解决方案

这是未分配给int变量的汇编器代码 通用标签

编译器不调用_strlen,因为该值将不使用

其他提示

编译器可能正在优化未分配返回值的第一个“ strlen”调用。

将空指针传递给strlen会导致未定义行为一切皆有可能。包括分段错误。并且不包含段错误。

如果您想知道确切原因,那么您将需要查看编译器生成的汇编代码。但这不会告诉您任何有用的信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top