题
我正在使用c字符串库的strlen函数。我传递了NULL 字符串,并发现了神秘的结果。我知道我不应该传递NULL字符串,但需要对此进行解释。代码看起来像这样 通用标签
在我的gcc编译器上,带有注释后运行良好。 但是如果您要删除该行中的评论 遗传标记代码
它产生分段错误。 有什么解释吗?
解决方案
这是未分配给int变量的汇编器代码 通用标签
编译器不调用_strlen,因为该值将不使用
其他提示
编译器可能正在优化未分配返回值的第一个“ strlen”调用。
将空指针传递给strlen
会导致未定义行为。一切皆有可能。包括分段错误。并且不包含段错误。
如果您想知道确切原因,那么您将需要查看编译器生成的汇编代码。但这不会告诉您任何有用的信息。
不隶属于 StackOverflow