我一直在51行上發現Seg故障fscanf(fp, "%d", lenPtr)
。每次運行該程序時,都會打印「1」,但在seg故障之前,它永遠不會達到2。我做了很多次,似乎無法找出麻煩。我知道這是不正確的,但是當我將第51行替換爲fscanf(fp,"%d", *lenPtr);
時,它不會導致分段錯誤。無法讓fscanf在簡單程序中正確執行
//Brendan Sullivan
//Section D
//Prelab 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum {
PENNY = 1,
NICKEL = 2,
DIME = 10,
QUARTER = 25,
} Denomination;
typedef struct {
Denomination denomination;
int quantity;
} Coin;
typedef Coin *PiggyBank;
PiggyBank loadBank(const char *filename, int *lenPtr);
int totalMoney(PiggyBank bank, int length);
int main(int argc, char *argv[]) {
int *length;
PiggyBank piggyBank = loadBank(argv[1], length);
/*for (i = 0; i < (*lenPtr); i++) {
printf("%d %d", piggyBank[i].denomination, piggyBank[i].quantity);
}*/
return 0;
}
PiggyBank loadBank(const char *filename, int *lenPtr) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("File could not be opened\n");
*lenPtr = 0;
return NULL;
}
printf("1\n");
fscanf(fp, "%d", lenPtr); //Line 51
printf("2\n");
printf("%d\n", *lenPtr);
PiggyBank piggyBank = malloc(sizeof(Coin) * (*lenPtr));
int i;
for (i = 0; i < *lenPtr; i++) {
fscanf(fp,"%u %d", &piggyBank[i].denomination, &piggyBank[i].quantity);
}
return piggyBank;
fclose(fp);
}
請不要在行號後面輸入代碼。它的可讀性較差,並且無法剪切和粘貼到編輯器進行測試和編譯。 – chqrlie
'piggyBank; fclose(fp);' - 'fclose'永遠不會被執行。在「返回」之前移動它。從'main'免費(piggyBank)'。 –