我一直在研究這段代碼一段時間,現在我遇到了一個我似乎無法調試的seg故障。下面是相關的代碼:fread到結構數組中分段錯誤
typedef struct Halo* Halo;
struct Halo
{
float x, y, z;
float vx, vy, vz;
int n200a;
float m200a;
float r200a;
int n200c;
float m200c;
float r200c;
int n500a;
float m500a;
float r500a;
int n500c;
float m500c;
float r500c;
};
全局變量:
暈* halo_catalog;
失敗的函數:
int loadHaloCatalog(char *filename)
{
FILE *catalog_file;
long long halo_num;
catalog_file = fopen(filename, "rb");
if (catalog_file == NULL) {
printf("Could not open halo catalog: %s\n", filename);
return -1;
}
if (fread(&halo_num, sizeof(long long), 1, catalog_file) < 0) {
printf("Could not read number of halos\n");
return -1;
}
halo_catalog = (Halo *)calloc(halo_num, sizeof(struct Halo));
if (fread(halo_catalog, sizeof(struct Halo), halo_num, catalog_file) < 0) {
printf("Could not read that number of halos\n");
return -1;
}
printf("%f\n", halo_catalog[10000]->x);
printf("done\n");
fclose(catalog_file);
return (int)halo_num;
}
它未能上的 「printf(」 %F \ n 「個,halo_catalog [10000] - > X);」行或對fread調用後分配的內存的任何其他訪問。我知道我傳入了一個有效的文件,因爲它可以正確讀取halo_num。它還從fread調用中收集關於Halo對象的正確信息,例如當我調用fread並檢查返回值時,它返回halo_num。
謝謝!
嘗試更改'typedef struct Halo * Halo;'到'typedef struct Halo Halo;';和'halo_catalog [10000] - > x'到'halo_catalog [10000] .x'。 – 2013-04-08 20:20:24