gpt4 book ai didi

c - GNU C 库中的 opendir( ) sigsegv

转载 作者:行者123 更新时间:2023-11-30 16:02:15 26 4
gpt4 key购买 nike

我在 x86-64 架构的 Linux 上使用 Eclipse。当我向 opendir() 传递一个空指针时,我在调用它时遇到了段错误。

char* directory = NULL;

/*
* ...
* Get directory from the command line. If not given, directory will be NULL.
* ...
*/

DIR* dir = opendir( directory ); // Seg fault here with null pointer. Instruction: cmpb $0x0,(%rdi)

我可以在调用 opendir() 之前放置一个简单的保护线来检查空指针。然而,我觉得奇怪的是 opendir() 方法的第一行不是这样的:

if( dir == NULL )
return NULL;

我只是在这里迂腐,还是我错过了什么?

顺便说一句,我很好奇为什么错误发生在 cmpb 操作码处?此外,Eclipse 在信号 Pane 中没有显示任何有关段错误的信息。

提前致谢,安德鲁

最佳答案

这是一个设计决策 - 标准库和 POSIX 中的许多函数都按照您描述的方式运行。错误检查是调用者的责任。尝试使用空指针调用 strlen() - 它的行为方式可能相同。

就您而言,失败的指令似乎是有道理的。 RDI 可能是空指针,并且尝试取消引用该空指针会导致段错误。相关的 cmpb 指令似乎是检测传入字符串的空终止符的循环的一部分。

关于c - GNU C 库中的 opendir( ) sigsegv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com