恐惧中止 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 的内容没有终止,所以你不能在上面使用字符串函数。根据你在做什么,你可能需要添加一个终止符,或确保将其写入文件)
在我的代码中,我从文本文件中发送每个 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 的内容没有终止,所以你不能在上面使用字符串函数。根据你在做什么,你可能需要添加一个终止符,或确保将其写入文件)