我有這樣的代碼: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' –