2011-11-09 5 views
0

바이너리 파일에서 두 개의 다이나믹 할당 벡터를 읽는 데 도움이 필요합니다. 결국 Segmentation Fault 오류가 발생하지만 fread()가 문제없이 완료된 경우에도 벡터는 0으로 채워집니다 (때로는 w/zero 및 "garbage"로 표시). 여기 바이너리 파일에서 동적 할당 벡터 읽기

내가 그것을 읽고 사용하는 코드입니다 :

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

이가 (당신은 당신의 스택을 손상하는) 버그가 있습니다

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를 사용하여 프로그램을 테스트해야합니다. 그 일을 자주하면 많은 시간을 절약 할 수 있습니다.

+0

Ty, 문제를 해결했습니다. 또한이 Valgrind를 살펴 보겠습니다. – Imperian