File 从二进制文件读取动态分配向量

File 从二进制文件读取动态分配向量,file,file-io,memory-management,segmentation-fault,File,File Io,Memory Management,Segmentation Fault,我需要从二进制文件中读取两个dinamic分配向量的帮助。 最终会出现分段错误,但是向量仍然充满了零(有时是w/zero和“垃圾”),即使fread()没有出现问题 下面是我用来阅读的代码: struct Node *node; node = (Node *) calloc(GRAPHSIZE,sizeof(Node)); int edgesSize = 2*GRAPHSIZE; int *edges; edges = (int *) calloc(edgesSize,sizeof(in

我需要从二进制文件中读取两个dinamic分配向量的帮助。 最终会出现分段错误,但是向量仍然充满了零(有时是w/zero和“垃圾”),即使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);
这些是bug(您正在损坏堆栈):

您希望这样做:

fread (edges, edgesSize * sizeof(int),1,file);
fread (node, GRAPHSIZE * sizeof(Node),1,file);
fwrite也有同样的问题


顺便说一句,如果你在Linux上,你应该用Valgrind测试你的程序。经常这样做,会节省很多时间。

Ty,这就解决了问题,我也来看看这个Valgrind。
fread (edges, edgesSize * sizeof(int),1,file);
fread (node, GRAPHSIZE * sizeof(Node),1,file);