执行“错误地址”错误
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
(在子情况下)。这样的整数不太可能映射到有效的内存地址,因此您的错误。事实上,即使它确实映射到一个有效的地址,程序很可能无论如何都会崩溃,因为该地址可能不包含有效的字符串;至少,你会得到意想不到的结果。
【讨论】:
以上是关于执行“错误地址”错误的主要内容,如果未能解决你的问题,请参考以下文章
Apache 错误:地址已在使用中:make_sock:无法绑定到地址 [::]:443
关闭 MFMailComposeViewController 时出现奇怪的错误:错误:地址不包含指向目标文件中某个部分的部分