fscanf를 사용하여 화면의 모든 문자를 읽고 인쇄하려고 시도하지만 세그먼트를 실행할 때 분할 오류가 발생합니다 프로그램.fscanf를 사용하여 포인터를 읽을 때 세그먼트 오류 (코어 덤프)가 발생했습니다.
이./myprog input.txt
파일 input.txt
이 포함되어 있습니다 :이 같은 인수로 파일을 제공
#include <stdio.h>
main(int argc, char * argv[]) {
int *a ;
FILE *input;
if (argc>=2) {
input= fopen(argv[1],"r");
if (input!=NULL) {
while (feof(input)==0) {
fscanf(input,"%d\n",a);
printf("%d\n",*a);
}
fclose(input);
} else {
printf("Error!\n");
}
}
}
: 여기 내 코드의 a
가 가리 키도록 초기화되지 않은 변수
23
47
55
70
첫 번째 문장 설명은 거짓입니다.'int * a;'로 선언 된 변수는 ** static ** 변수, 예를 들어 모듈의 전역 범위에 정의 된 변수 (즉, 함수 밖)에 정의 된 변수 인 경우 null 포인터로 초기화됩니다. 그러나 여기에서 논의 된 경우 변수는'main()'함수 안에서 선언되므로 자동 변수이므로 초기화 할 필요는 없습니다. 결과적으로, 아무 것도 존재하지 않거나 적어도 접근 할 수없는 메모리 영역을 가리키며, 따라서 지적 된 영역을 읽으면 세그먼트 화 예외가 발생합니다. – CiaPan
죄송합니다. OP의 코드를 잘못 읽었을 것입니다.'int * a;'가'main()'앞에 있다고 생각했습니다. –