【问题标题】:Reading dynamic allocated vectors from binary file从二进制文件中读取动态分配的向量
【发布时间】:2011-11-09 16:06:36
【问题描述】:

我需要帮助从二进制文件中读取两个动态分配的向量。 最终会出现分段错误错误,但即使 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);

【问题讨论】:

    标签: file file-io memory-management segmentation-fault


    【解决方案1】:

    这些是错误的(你正在破坏你的堆栈):

    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 测试你的程序。经常这样做,会节省很多时间。

    【讨论】:

    • Ty,解决了这个问题,我也来看看这个Valgrind。
    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多