我想重新分配更多的256字节缓冲区在每个循环调用。在这个缓冲区中,我将存储从read()
获得的缓冲区。realloc()循环中的段错误
这里是我的代码:
#define MAX_BUFFER_SIZE 256
//....
int sockfd = socket(...);
char *buffer;
buffer = malloc(MAX_BUFFER_SIZE);
assert(NULL != buffer);
char *tbuf = malloc(MAX_BUFFER_SIZE);
char *p = buffer;
int size = MAX_BUFFER_SIZE;
while(read(sockfd, tbuf, MAX_BUFFER_SIZE) > 0) {
while(*tbuf) *p++ = *tbuf++;
size = size + MAX_BUFFER_SIZE; // it is the right size for it?
buffer = realloc(buffer, size);
assert(NULL != buffer);
}
printf("%s", buffer);
free(tbuf);
free(p);
free(buffer);
close(sockfd);
但上面的代码返回段故障。我错在哪里?任何帮助非常感谢。提前致谢。
'while(* tbuf)* p ++ = * tbuf ++;'您正在增加tBuf,它是malloc(0)d。你永远无法释放它,因为你失去了原来的指针。提示:使用'memcpy(p,tbuf,return_from_read);'while(* tbuf)'假设一个nul结尾的字符串。 – wildplasser 2012-03-21 19:49:36