我有这样的代码:realloc:下一个尺寸无效; memcpy的
char buf[128];
char *data = NULL;
char *temp = NULL;
int full = 0;
int n = 0;
do {
bzero(buf, sizeof(buf));
n = recv(newsock, buf, sizeof(buf), 0);
full += sizeof(buf);
if(n != 0)
temp = realloc(data, sizeof(buf));
if(temp != NULL) {
data = temp;
} else {
// error
}
memcpy(data + (full - sizeof(buf)), buf, sizeof(buf));
printf("%s\n",data);
} while(n > 0);
在这段代码中我尝试从插座获取一些数据来缓冲,并把这个数据放到内存中。但我有问题。对while循环,我得到的消息是这样第三次迭代:
*** glibc detected *** ./server: realloc(): invalid next size: 0x09a4c008 ***
当我删除的memcpy()函数一切都好,但我怎样才能把数据到内存?哪里不对?
什么是'total'?我没有看到它在任何地方定义。另外(关闭主题),你如何保证'data'在传递给'printf'之前是空终止的? –
select()返回文件描述符的数量,今天最好使用'memset'而不要使用'bzero' –