【发布时间】:2014-05-16 08:04:33
【问题描述】:
我想从套接字中保留动态内存。响应的大小是可变的,所以我想使用 realloc 来分配适当的内存大小。
这是处理它的代码 sn-p:
char *ptr = (char*)calloc(sizeof(char),1024);
char *ptr2 = (char*)calloc(sizeof(char),1024);
//printf("aaaaaaa %p bbbbbbbb",ptr);
int nDataLength;
int i = 0;
while ((nDataLength = recv(Socket, ptr, 1024, 0)) > 0){
if (i > 0){//prepare in case that the response is bigger than 1024 bytes
printf("Data len: %d\n", nDataLength);
printf("%p points toa %d len: %d\n", ptr, *ptr, ((1024 * i) + nDataLength));
ptr2 = (char*)realloc(ptr2,((1024*i)+nDataLength));
printf("%p pints toa %d\n", ptr2, *ptr2);
system("pause");
memcpy(ptr2, ptr, nDataLength);
}
memcpy(ptr2, ptr, nDataLength);
i++;
}
问题是我从套接字接收的缓冲区总是被 memcpyed 到同一个地址,所以我覆盖了以前的缓冲区。如何移动 ptr2 以不覆盖以前的存储缓冲区?它必须是这样的:
memcpy(ptr2+((1024 * i), ptr, nDataLength); 但它不起作用。
谢谢
【问题讨论】:
-
我觉得它应该可以工作,没有任何问题。你能把整个代码贴出来吗?
标签: c sockets memory-management malloc realloc