C语言在Clion中运行提示exit code 139错误是什么含义?
报错含义解释
exit code 139对应的SIGSEGV是段错误信号,含义是程序尝试访问了未被分配给自身的内存空间、或是访问了无读写权限的内存地址,被操作系统强制终止运行。
代码错误原因
你代码里的printf调用完全不符合语法要求:
- C标准规定
printf的第一个入参必须是const char*类型的格式化字符串 - 你直接把
short类型的s、char类型的ch2作为第一个参数传给printf,编译器会把这两个变量的数值当成内存地址,尝试读取该地址存储的字符串内容 - 比如你第一次传的
s值是'A'对应的ASCII码65,也就是尝试读取地址0x41位置的内存,这个地址属于系统保留区域,用户态程序没有访问权限,直接触发段错误。
正确的写法示例
如果你要打印变量对应的字符值,需要传入对应的格式化占位符:
#include <stdio.h> #include <string.h> int main(void) { char ch = 'A'; short s = ch; printf("%c", s); printf("\n________________________\n"); short s2 = 67; char ch2 = s2; printf("%c", ch2); return 0; }
运行后会输出:
A ________________________ C
避坑提示
开启编译警告即可在编译阶段直接发现此类问题,比如使用GCC/Clang编译时添加-Wall参数,编译器会直接提示printf入参类型不匹配的错误。
内容的提问来源于stack exchange,提问作者meddhiaka
相关产品推荐
相关产品推荐

