Fread Abort 6错误

时间:2017-11-20 03:11:08

标签: c malloc fread

在我的代码中,我发送的数据包每个都有128个字节来自文本文件,需要从文本文件中读取数据(我不能在发送前分配缓冲区并读取所有内容,因为文件将非常大)。出于某种原因,即使我分配了内存,我也会收到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 个答案:

答案 0 :(得分:2)

我认为您需要做的就是用strcpy代替最终的memcpy。也就是说,最后一行应为memcpy(packingT.data, sendString, 128);

(编辑:原因是strcpy通过在末尾扫描零来确定要复制的东西的长度。你正在读取任意数据,它可能在中间有零,并且可能不总是以零)

(编辑2:请注意,packingT.data的内容未终止,因此您无法在其上使用字符串函数。根据您正在执行的操作,您可能需要添加终止符,或确保一个被写入文件)