我不明白什麼是錯誤的在程序中。我正在定義一個指向結構數組的指針。馬洛克已經有足夠的記憶了。初始化數組元素。然後使用fwrite將數組寫入二進制文件。然後嘗試讀取相同的內容,返回到另一個指向類似數組的指針,該數組具有足夠的內存malloc'ed。將Struct的數組寫入二進制文件
#include<stdio.h>
typedef struct ss{
int *p;
char c;
double d;
char g;
float f;
} dd;
main(){
dd (*tt)[5];
int i=0,a[5]={4,1,6,9,3};
tt=malloc(sizeof(struct ss[5]));
for(i=0;i<5;i++){
tt[i]->p=malloc(sizeof(int));
tt[i]->p=&a[i];
tt[i]->c=(char)('a'+i);
tt[i]->d=(double)(5.234234+i);
tt[i]->g=(char)('A'+i);
tt[i]->f=(float)(15.234234+i);
}
FILE *F;
F=fopen("myfile","w+b");
size_t l;
l=fwrite(tt,sizeof(*tt),1,F);
fseek(F,0,SEEK_SET);
//printf("sizeof(dd)=%d sizeof(*tt) =%d bytes written %d\n",sizeof(dd),sizeof(*tt),l);
dd (*xx)[5];
xx=malloc(sizeof(struct ss[5]));
l=fread(xx,sizeof(*xx),1,F);
for(i=0;i<5;i++){
printf("%d, %c,%f,%c,%f\n",*(xx[i]->p),xx[i]->c,xx[i]->d,xx[i]->g,xx[i]->f);
}
printf("Date Read %d \n",l);
for(i=0;i<5;i++){
free(xx[i]->p);
}
free(xx);
free(tt);
fclose(F);
remove("myfile");
}
輸出:
4,A,5.234234,A,15.234234
分段故障
我知道寫一個文件指針是一個壞主意。我在做這個練習只是爲了更好地理解指向數組的指針。你非常清楚地表示感謝。我將讀取該數組的指針鏈接。 mem漏洞捕獲+1。我改變了指針現在只保存靜態數組地址的代碼。 – Pkp 2012-03-21 14:38:53