如标题所示,我在调用 execve() 时收到“错误地址”错误。每当我发现其他人遇到同样的问题时,他们只是省略了数组末尾的 NULL,但我在这里这样做,但仍然出现错误。有人知道是什么原因造成的吗?
switch(fork()) {
case 0: //child
(void) close(msock);
char *argv[] = {"./echo", (char *)ssock, NULL};
char *envp[] = {NULL};
int result = execve(argv[0], argv, envp);
if (result < 0) {
err_sys("execve");
}
case -1: //error
err_sys("fork");
break;
default: //parent
(void) close(ssock);
break;
}
最佳答案
根据您的代码,ssock
是一个整数,一个文件描述符,因为您在默认情况下(父级)将它传递给 close()
。
但是,您还将该整数作为字符指针传递给参数列表中的 execve
(在子情况下)。这样的整数不太可能映射到有效的内存地址,因此您的错误。事实上,即使它确实映射到一个有效地址,程序也很可能会崩溃,因为该地址可能不包含有效字符串;至少,你会得到意想不到的结果。
关于c - 执行 "Bad address"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286569/