2014-08-28 62 views
0

當堆結構在堆段中聲明時,Fread不讀取?我能夠在文件中寫入,但是當我嘗試閱讀文件時,我得到分段錯誤。我的代碼如下,請幫我修復?結構在堆節中聲明時,Fread不讀取?

低於第一代碼是用於在文件寫入結構數據並且該結構是存儲在堆部分和第二碼是用於讀取包含該文件的

作家源

/* writing in file this code is good*/ 
#include<stdio.h> 
#include<stdlib.h> 
struct st 
{ 
    int roll; 
    char name[11]; 
    float marks; 
}; 
int main() 
{ 
    int i; 
    struct st *var; 
    var=malloc(sizeof(struct st) *5) ; 

    FILE *fp; 
    fp=fopen("ha","w"); 
    for(i=0;i<5;i++) 
    { 
     printf("enter roll\n"); 
     scanf("%d",&var[i].roll); 
     printf("enter name\n"); 
     scanf("%s",var[i].name); 
     printf("enter marks\n"); 
     scanf("%f",&var[i].marks); 

    } 
    fwrite(&var,sizeof(struct st),1,fp); 
    fclose(fp); 
} 

閱讀器代碼

#include<stdio.h> 
#include<stdlib.h> 
struct st 
{ 
    int roll; 
    char name[11]; 
    float marks; 
}; 
int main() 
{ 
    int i; 
    struct st *var1; 

    var1=malloc(sizeof(struct st)*5); 
    FILE *fp; 
    fp=fopen("ha","r"); 
    fread(&var1,sizeof(struct st),1,fp); 
    for(i=0;i<5;i++) // I M GETTING SEGMENTATION FAULT? 
    { 
     printf("%d\n",var1[i].roll); 
     printf("%s\n",var1[i].name); 
     printf("%f\n",var1[i].marks); 
    } 
} 
+0

的fread(VAR1,的sizeof(結構ST),1,fp的);這裏var1已經是一個指針了。不要使用&在這裏。並且在循環中讀取每個結構,您只會讀取第一個項目。 – 2014-08-28 06:19:22

回答

0

您只分配空間f或者一個struct st但您嘗試訪問其中5個。

要分配5,做var = malloc(5 * sizeof *var);

而且,你打開你的文件5次,fp=fopen("hai","w");線應該來的循環之後。 (你應該檢查它是否成功)。

+0

我做了改變你說,但仍然分段故障。請你編輯我的代碼並顯示? – 2014-08-28 06:31:25

+0

不,這不是這個網站的工作原理。發佈您所做的更改。另外,調試你的程序。你應該找出段錯誤發生在哪一行,然後這會給你一個線索。 – 2014-08-28 06:42:51

0

嘗試這種情況:

if(fp == NULL) 
{ 
    return 1; 
}