나는이 문제를 디버깅하여 내 fgets가 작동하지 않는 이유를 알 수 없습니다. 코드를 동적으로 배열 크기를 변경하기 전에 fgets가 완벽하게 작동합니다. 내가 C에서 초보자 인 이래로이 문제는 오랫동안 나를 당황하게했다. fgets의 분할 오류
int readNumbers(int array[], char* fname, int hexFlag) {
int numberRead = 0;
FILE* fp;
int counter = 0;
char arr[100];
char* ptr;
fp = fopen(fname, "r");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
while (fgets(arr, sizeof(arr), fp)) {
ptr = strtok(arr, " \n");
while(ptr) {
if (hexFlag == 0) {
array[counter++] = strtol(ptr , NULL , 10);
} else {
array[counter++] = strtol(ptr, NULL, 16);
}
++numberRead;
ptr = strtok(NULL , " \n");
}
}
if (ferror(fp)) {
fclose(fp);
return -1;
}
새로 추가 된 변경 SEG 결함
이 파일의 끝은 다음과 같습니다 여기int readNumbers(int **array, char* fname, int hexFlag) {
int numberRead = 0;
FILE* fp;
int counter = 0;
char arr[100];
char* ptr;
size_t curSize = 16;
int radix = hexFlag ? 16 : 10;
*array = malloc(0 * sizeof(*array));
fp = fopen(fname, "r");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
while (fgets(arr, sizeof(arr), fp)) { //Seg faults here when it reaches end of file.
ptr = strtok(arr, " \n");
while(ptr) {
if (counter >= curSize) {
curSize += 16;
array = realloc(*array, curSize * sizeof(**array));
}
(*array)[counter++] = strtol(ptr, NULL, radix);
++numberRead;
ptr = strtok(NULL , " \n");
}
}
if (ferror(fp)) {
fclose(fp);
return -1;
}
는 변화가 배열 크기 조정을 할 전에 작업 코드 : 여기
는 결함이있는 코드입니다 도달했습니다. 나는 이것이 이중 포인터와 관련이 있다고 강력하게 생각한다. 어떤 도움을 강력하게 감사드립니다!
그것이 효과가 있다고 생각 했습니까? '* array = malloc (0 * sizeof (* array)); ' –
@AmitSharma 아! 나는 그것이 고정되어있는 것을 본다! 하지만 그게 fgets가 파일 대신에 즉시 오류를 일으키는 원인이 될지 이해하지 못합니다. – Ansdai