使用指针交换两个一维数组元素时程序崩溃,请求排查问题
问题分析与修正
你的程序崩溃的核心原因是未初始化的野指针,另外还有几处语法和逻辑错误,逐一说明:
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
相关产品推荐
相关产品推荐

