コードを見てください:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p;
p = malloc(6);
p = realloc(p, 10);
if (p == NULL)
{
printf("error");
exit(1);
}
}
コードのこの例を取り上げます。合計メモリが 10 バイトであり、2 バイトが int 型へのポインターの宣言によって使用され、さらに 6 バイトが malloc 関数によって使用され、残りの 2 バイトが他のプログラムによって占有されているとします。今、realloc 関数を実行するとポインタが指しているメモリを拡張するために、メモリ内で 10 バイトを検索し、それが利用できない場合は、ヒープ領域から 10 バイトのメモリを割り当て、malloc の内容をコピーして、ヒープ領域内の新しく割り当てられたメモリ領域に貼り付けます。次に、mallocに格納されているメモリを削除しますよね?
メモリが使用できないため、realloc() は NULL ポインターを返しますか? 権利はありません!?メモリ割り当ての権利のためにヒープ領域に移動しますか?NULL ポインターを返しませんよね?