C语言swap函数指针错误导致程序无报错突然终止是什么原因
问题根本原因
你定义的int *temp是未初始化的野指针,没有指向任何合法可写的内存空间,直接对其解引用赋值触发了操作系统的内存访问保护,导致程序直接终止。
具体执行流程说明
- 进入
swap函数后,第一行printf("asdf");逻辑合法,所以控制台正常输出了第一个asdf。 - 接下来执行
*temp = *a;:此时temp指针内部存储的是随机的垃圾地址,这个地址要么属于操作系统受保护的内存区域,要么是完全无效的虚拟内存地址,当前进程没有权限向这个地址写入数据。 - 操作系统检测到非法内存访问操作后,会直接发送信号终止当前进程,因此后续的第二行
printf、交换赋值逻辑都没有机会执行,程序直接崩溃退出。
正确写法参考
你只需要将temp定义为普通整型变量即可,不需要用指针类型:
void swap(int *a, int *b) { int temp; // 定义普通整型变量存储中间值 temp = *a; *a = *b; *b = temp; }
内容的提问来源于stack exchange,提问作者Priyank Dave
相关产品推荐
相关产品推荐

