Чтение динамически распределенных векторов из двоичного файла - PullRequest
0 голосов
/ 09 ноября 2011

Мне нужна помощь в чтении двух динамически распределенных векторов из двоичного файла. В конечном счете, возникает ошибка Сегментации, но векторы остаются заполненными нулями (иногда с нулями и "мусором"), даже когда fread () выполняется без проблем.

Вот код, который я использую, чтобы прочитать его:

struct Node *node;  
node = (Node *) calloc(GRAPHSIZE,sizeof(Node));

int edgesSize = 2*GRAPHSIZE;

int *edges;
edges = (int *) calloc(edgesSize,sizeof(int));  

FILE * file;

printf("\nLoading graph file...\n");

file = fopen ("graph1M.g","rb");    
fread (&edges, edgesSize * sizeof(int),1,file);
fread (&node, GRAPHSIZE * sizeof(Node),1,file);
fclose(file);

И вот как они спасаются:

int edgesSize = 2*GRAPHSIZE;

struct Node *node;  
node = (Node *) calloc(GRAPHSIZE,sizeof(Node));


int *Edges;
Edges = (int *) calloc(edgesSize,sizeof(int));  


/* put data into the vectors... */


FILE *file;

//writes file:
file = fopen ("graph1M.g","wb");
fwrite (&Edges, edgesSize * sizeof(int),1,file);
fwrite (&node, GRAPHSIZE * sizeof(struct Node),1,file);
fclose(file);

1 Ответ

1 голос
/ 10 ноября 2011

Это ошибки (вы портите свой стек):

fread (&edges, edgesSize * sizeof(int),1,file);
fread (&node, GRAPHSIZE * sizeof(Node),1,file);

Вы хотите это вместо:

fread (edges, edgesSize * sizeof(int),1,file);
fread (node, GRAPHSIZE * sizeof(Node),1,file);

Та же проблема с fwrite.

Кстати, если вы работаете в Linux, вам следует протестировать свои программы с помощью Valgrind. Делайте это часто, это сэкономит вам много времени.

...