次のコードを検討してください。
char buffer[] = "abcdefghijklmnopqrstuvwxyz",
*val = malloc(10), *pbuf = buffer, *pval = val, *tmpbuf;
int size = 10,loaded = 0;
while(*pbuf) {
if((loaded + 1) >= size) {
size += 10;
tmpbuf = realloc(val, size);
if(tmpbuf != NULL) {
val = tmpbuf;
pval = val;
} else {
printf("realloc()\n");
exit(-1);
}
}
*pval ++= *pbuf ++;
loaded ++;
}
*pval ++= '\0';
printf("%s\n", val);
free(val);
tuvwxyz
の代わりに印刷しabcdefghijklmnopqrstuvwxyz
ます。
なんで?ドキュメントによると、によって返された新しいポインターはrealloc()
、以前に渡されたバッファーを保持していません。