2017-11-20 18 views
-1

내 코드에서 텍스트 파일의 각 128 바이트 패킷을 보내고 텍스트 파일에서 데이터를 읽어야합니다 (버퍼를 할당하고 전송하기 전에 읽을 수는 없습니다) 파일이 매우 크기 때문에). 어떤 이유로 메모리를 할당 한 경우에도 Abort 6 오류가 발생합니다.Fread Abort 6 오류

SendIndex는 0으로 시작하고 첫 번째 보내기에 대해 중단되므로 문제가되지 않아야합니다.

strcpy에서 문제가 발생합니다. 이유를 모르겠습니다.

정말 혼란스러워서 정말 감사하겠습니다.

struct packet packingT; 
packingT.header = mpHeaderT; 
packingT.data = (char*) calloc(512,sizeof(char)); 

char* sendString = (char*)calloc(128,sizeof(char)); 


FILE *file = fopen(receivedStruct->fileTitle, "rb"); 
if(file == NULL) { 
    printf("Error - Can't Open File\n"); 
    exit(0); 
} 

fseek(file, 128*sendIndex, SEEK_SET); 

fread(sendString, 128, 1,file); 
fclose(file); 
// sendString[128] = '\0'; <--- Still don't know if this is needed 

packingT.header->seq_num = receivedStruct->nextSeqNum; 

strcpy(packingT.data, sendString); 

답변

1

내가 대신 memcpy와 최종 strcpy를 교체하기 만하면 모든 생각합니다. 즉, 마지막 줄은 memcpy(packingT.data, sendString, 128);

이어야합니다. (편집 : 이유는 strcpy가 끝에 0을 스캔하여 복사 할 길이를 결정하기 때문입니다. 임의의 데이터를 읽는 중입니다. 중간에 항상 0으로 끝나는 것은 아닙니다.)

(Edit2 : packingT.data의 내용이 종료되지 않으므로 문자열 기능을 사용할 수 없습니다. 다시 말하자면 종결자를 추가하거나 파일에 문자가 기록되도록해야 할 수도 있습니다.