【发布时间】:2021-10-27 14:16:40
【问题描述】:
我尝试在 Clion ide 中运行如下所示的简单 C 代码,每次编译时,都会显示以下消息:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
C 代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch = 'A';
short s = ch;
printf(s);
printf("\n________________________\n");
short s2 = 67;
char ch2 = s2;
printf(ch2);
return 0;
}
【问题讨论】:
-
printf(s);和printf(ch2);一样是未定义的行为。请看exit code 139 site:stackoverflow.com -
您是否收到任何编译器警告?如果是这样,您应该注意它们。
-
追踪这样的崩溃的快速方法:在调试工具中运行程序,该工具应该与您的开发工具一起提供(如果您的工具没有调试器,请获取新工具)。当程序崩溃时,调试器将停止并允许您检查崩溃现场。如果它没有在您的代码中崩溃,请使用回溯(通常称为调用堆栈)来查找您的代码调用未知代码的位置。检查传递给函数的参数,并确保它们与函数文档所说的您应该提供的相匹配。
-
如果一切都匹配,事情会变得更难。进一步回顾代码中的一个错误,该错误可能会致命地伤害程序而不会立即崩溃。如果您没有发现问题,您可能必须逐行检查导致崩溃的原因,并注意程序走错路径或存储错误值等意外行为。意外通常是错误,如果不是,则意味着您的期望是错误的。任何一个问题都需要解决。
标签: c printf undefined-behavior