恐惧中止 6 错误

Fread Abort 6 error

在我的代码中,我从文本文件中发送每个 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] = '[=10=]';  <--- Still don't know if this is needed

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

strcpy(packingT.data, sendString);

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

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

(Edit2: 请注意 packingT.data 的内容没有终止,所以你不能在上面使用字符串函数。根据你在做什么,你可能需要添加一个终止符,或确保将其写入文件)