退出代码11在C中的含义?

退出代码11在C中的含义?,c,segmentation-fault,exit-code,C,Segmentation Fault,Exit Code,退出代码11在C中的一般含义是什么?我环顾四周,找不到一个明确的答案,所以我想我会在这里问。当我尝试将一个元素添加到一个向量时,它就会出现 在某些情况下,没有定义应用程序必须设置哪些退出代码的标准。这完全取决于程序员,哪个退出代码代表哪个错误甚至成功 有时程序员认为任何不同于零的值都表示错误,有时该值等于操作系统错误代码 在Windows上,由于文件出现问题,可能会使用退出代码11。如果您想要此错误代码的描述(特定于Windows,不一定是您的应用程序),请运行net helpmsg 11,因为

退出代码11在C中的一般含义是什么?我环顾四周,找不到一个明确的答案,所以我想我会在这里问。当我尝试将一个元素添加到一个向量时,它就会出现

在某些情况下,没有定义应用程序必须设置哪些退出代码的标准。这完全取决于程序员,哪个退出代码代表哪个错误甚至成功

有时程序员认为任何不同于零的值都表示错误,有时该值等于操作系统错误代码


在Windows上,由于文件出现问题,可能会使用退出代码11。如果您想要此错误代码的描述(特定于Windows,不一定是您的应用程序),请运行
net helpmsg 11

,因为没有明确的答案。由程序的作者决定他们希望使用什么退出代码。标准C仅说明
exit(0)
exit(exit\u SUCCESS)
表示程序成功,而
exit(exit\u FAILURE)
表示某种错误。(从
main
返回一个值相当于用该值调用
exit
。)大多数常见的操作系统,包括Windows、Linux、OSX等。使用0表示成功,使用1到255的值表示错误;仍然要由应用程序编写器在错误代码之间进行选择,值11没有什么特别之处


在Linux和大多数其他Unix变体中,数字11表示a,如图所示。当程序进行某种无效的内存访问时,就会发生分段错误,因此这可能是访问超出边界的数组、指针算术错误、尝试访问空指针或其他指针相关错误的结果。信号11与退出代码11不同:当程序因信号而死亡时,它被标记为已被信号杀死,而不是正常退出。Unix Shell通过报告退出代码来报告信号,退出代码是信号号加128,因此139表示分段错误。

其他答案忽略了短语“退出代码”中可能存在的歧义。我怀疑您所说的“退出代码”是指通过系统调用的
wait
系列检索到的状态代码,如:

/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d\n", status);
如果您这样做,如果子进程发生故障,您可能会看到“退出代码11”。如果子进程实际调用了退出(11),您可能会看到“退出代码2816”

最好将这些东西称为“wait code”或“wait status”,而不是“exit code”,以避免与传递给exit的值混淆。等待代码包含多条信息,这些信息打包成一个整数。通常,您不应该直接查看整数(就像我在上面的
printf
中所做的那样)。您应该使用
中的
W*
宏来分析它

WIF*
宏开始,找出发生了什么样的事情,然后使用该信息确定要使用哪些其他
W*
宏来获取详细信息

if(WIFEXITED(status)) {
  /* The child process exited normally */
  printf("Exit value %d\n", WEXITSTATUS(status));
} else if(WIFSIGNALED(status)) {
  /* The child process was killed by a signal. Note the use of strsignal
     to make the output human-readable. */
  printf("Killed by %s\n", strsignal(WTERMSIG(status)));
} else {
  /* ... you might want to handle "stopped" or "continued" events here */
}

你确定你指的是“退出代码”,而不是信号11?也许你是混合了退出代码和返回代码,甚至是Kerrek提到的信号。显示导致问题的源代码。哪个平台?Linux、Windows或一般情况下?对于分段故障,这是一篇非常有用的故障排除文章: