次のようなコードがあります。
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 サイクルの 3 回目の繰り返しで、次のようなメッセージが表示されます。
*** glibc detected *** ./server: realloc(): invalid next size: 0x09a4c008 ***
memcpy() 関数を削除するとすべて問題ありませんが、どうすればデータをメモリに入れることができますか? なにが問題ですか?