重新分配错误:释放对象的校验和不正确
|
我尝试编写从stdin读取数据的代码:
size_t bufSize = 1024;
unsigned char *msg = NULL;
size_t msgBytes = 0;
size_t inputMsgBufCount = 0;
unsigned char inputBuffer[bufSize];
size_t bytesRead = 0;
unsigned char *tmp = NULL;
if ((msg = (unsigned char *)malloc(sizeof(unsigned char) * bufSize)) == NULL)
exit(EXIT_FAILURE);
bytesRead = fread(msg, sizeof(unsigned char) * bufSize, 1, stdin);
inputMsgBufCount++;
while (bytesRead) {
printf(\"iteration: %lu\\n\", inputMsgBufCount);
if ( (tmp = (unsigned char *)realloc(msg, (inputMsgBufCount * bufSize) + bufSize)) != NULL ) {
printf(\"reallocated\\n\");
msg = tmp;
inputMsgBufCount++;
}
else {
printf(\"Ran out of memory\\n\");
free(msg);
}
bytesRead = fread(inputBuffer, sizeof(unsigned char) * bufSize, 1, stdin);
memmove((msg + (inputMsgBufCount * bufSize)), inputBuffer, bufSize);
}
free(msg);
msgBytes = (inputMsgBufCount * bufSize);
gettimeofday(&end, NULL);
printf(\"%10.6lf [MB/s]\\n\", (msgBytes / (1<<20)) / ( (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) * 1.0e-6f ));
但是运行后如下所示:
〜#dd if = / dev / zero bs = 1024 count = 8 | 。/测试
我有这个错误:
迭代次数:1
重新分配
迭代次数:2
重新分配
迭代:3
重新分配
迭代:4
重新分配
迭代次数:5
重新分配
迭代:6
重新分配
迭代:7
test(11450)malloc:***对象0x100804008的错误:已释放对象的校验和不正确-对象在释放后可能已被修改。
***在malloc_error_break中设置断点以进行调试
中止陷阱
谁能帮我。
没有找到相关结果
已邀请:
1 个回复
挂帘妈乡
,并递增
,使其变为2。然后读取数据,并将其复制到
。这正在破坏您的缓冲区。您应该已经复制到
。只需延迟递增变量,直到复制数据之后。 另外,您可以放心地使用ѭ6copy复制数据。
和
将不会重叠。实际上,您可能应该完全摆脱
,并以正确的偏移量直接读取
。