我想重新分配更多的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