You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:01