以下程序不小心在11行scanf()中把parr写成了*parr,在编译时没问题,但在运行时出现:
[lujinhong@lujinhong chapter12]$ gcc reverse3.c
[lujinhong@lujinhong chapter12]$ ./a.out
Enter 10 number: 19 76 8 93 766 8 6 934 0 -3
Segmentation fault (core dumped)
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void){
int arr[ARRAY_SIZE], *parr;
printf("Enter %d number: ", ARRAY_SIZE);
for(parr=arr; parr<arr+ARRAY_SIZE; parr++){
scanf("%d", *parr);
}
printf("The number will output in reversal order:\n");
for(parr=arr+ARRAY_SIZE-1; parr>=arr; parr--){
printf("%d\t",*parr);
}
printf("\n");
return 0;
}
Segmentation fault (core dumped)一般是对内存操作不当造成的,常见的有:
(1)数组超出范围。
(2)修改了只读内存。
(3)还有本例也是修改了只读内存。