#include<stdio.h>
int main()
{
void inv(int *x,int n);
int i,*arr;
printf("The original array:\n");
for(i=0;i<10;i++)
scanf("%d",arr+i);
printf("\n");
inv(arr,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++)
printf("%d",*(arr+i));
printf("\n");
return 0;
}
void inv(int *x,int n)
{int *p,m,temp,*i,*j;
m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{
temp=*i;*i=*j;*j=temp;}
return ;
}
能告诉下为什么原先的那个会有问题吗?谢谢
追答这里的问题,从第5到第8行
int i,*arr;
printf("The original array:\n");
for(i=0;i<10;i++)
scanf("%d",arr+i);
arr定义成了指针,但是没有让它指向一段内存,也就是野指针。
这样的指针在使用的时候会有问题,就是如果你向这个指针指向的地址写数据(scanf("%d", arr +i)),就很可能破坏程序正常的栈或者操作系统内核,为了保护操作系统,这个时候操作系统会发送一个出错的信号给这个程序,让这个程序结束掉。
所以,这里,要么用 int arr[ARRAY_SIZE], 在栈上分配一段空间,要么用 int *arr = malloc(sizeof(int) * ARRAY_SIZE),在堆上分配一段空间,才能让程序正常运行。