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

使用指针交换两个一维数组元素时程序崩溃,请求排查问题

问题分析与修正

你的程序崩溃的核心原因是未初始化的野指针,另外还有几处语法和逻辑错误,逐一说明:

1. 野指针触发崩溃

你定义了int *temp;但没有给它分配有效的内存地址,直接执行*temp=*(p+i);时,指针temp指向随机内存区域,写入操作会触发非法内存访问,直接导致程序崩溃。

解决方法:不需要用指针做临时变量,直接用普通int变量即可,修改定义并保持交换逻辑:

// 原错误代码
int *temp;
*temp=*(p+i);

// 修正后
int temp;
temp=*(p+i);

2. 数组元素输出逻辑错误

输出数组时,*p+i等价于a[0]+i,并非你需要的a[i];同理*q+i也是错误的,应该用*(p+i)或p[i]访问数组第i个元素。

另外换行符是\n而非/n,原代码里的printf("%d/n",*p+i);会把/n当成普通字符输出,无法实现换行。

修正后的输出循环:

printf("Array1 elements: ");
for (i=0;i<n;i++){
    printf("%d ",*(p+i)); // 用*(p+i)访问第i个元素,空格分隔
}
printf("\n"); // 统一换行

printf("Array2 elements: ");
for (i=0;i<n;i++){
    printf("%d ",*(q+i));
}
printf("\n");

3. 其他可选优化点

原代码中printf("Enter array1&2 elements:");的提示和后续循环内的重复提示略有冗余,但不影响功能,可根据需求调整。

完整修正后的代码

#include <stdio.h> 

int main()
{
    int a[100],b[100],temp; // 将指针temp改为普通int变量
    int n,i;
    int *p=a;
    int *q=b;
    printf("Enter size of array1&2:");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        printf("Enter array1 element [%d]:",i);
        scanf("%d",p+i);
        printf("Enter array2 element [%d]:",i);
        scanf("%d",q+i);
        // 交换元素
        temp=*(p+i);
        *(p+i)=*(q+i);
        *(q+i)=temp;
    }
    printf("Array1 elements: ");
    for (i=0;i<n;i++){
        printf("%d ",*(p+i));
    }
    printf("\n");
    printf("Array2 elements: ");
    for (i=0;i<n;i++){
        printf("%d ",*(q+i));
    }
    printf("\n");
    return 0; // 建议添加main函数的标准返回值
}

内容的提问来源于stack exchange,提问作者Pankit Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:45:47