execve“错误的地址”错误

时间:2014-03-09 18:55:29

标签: c linux execve

正如标题所示,我在调用execve()时遇到“Bad Address”错误。每当我发现其他人遇到同样的问题时,他们只是在数组的末尾省略了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;
}

1 个答案:

答案 0 :(得分:2)

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

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