执行“错误地址”错误

Posted

技术标签:

【中文标题】执行“错误地址”错误【英文标题】:execve "Bad address" error 【发布时间】:2014-03-09 18:55:28 【问题描述】:

正如标题所示,调用 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的声明和内容是什么? 【参考方案1】:

根据您的代码,ssock 是一个整数,一个文件描述符,因为您在默认情况下(父级)将它传递给 close()

但是,您还将该整数作为字符指针传递给参数列表中的execve(在子情况下)。这样的整数不太可能映射到有效的内存地址,因此您的错误。事实上,即使它确实映射到一个有效的地址,程序很可能无论如何都会崩溃,因为该地址可能不包含有效的字符串;至少,你会得到意想不到的结果。

【讨论】:

以上是关于执行“错误地址”错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ioctl 返回“错误地址”

代码点火器错误“地址不被理解”

Apache 错误:地址已在使用中:make_sock:无法绑定到地址 [::]:443

如果往错误的NEO地址转账会发生什么

关闭 MFMailComposeViewController 时出现奇怪的错误:错误:地址不包含指向目标文件中某个部分的部分

无法启动服务器 QWsServer 错误:地址受保护