重複の可能性:
realloc および malloc 関数
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p;
p = malloc(6);
p = realloc(p, 10);
if (p == NULL)
{
printf("error"); // when does p point to null consider i have enough space in prgrm
//memory area but not in memory where realloc is trying to search
//for the memory, I dont know how to explain that try to undrstnd
exit(1);
}
}
コードのこの例を取り上げます。合計メモリが 10 バイトであり、2 バイトが int 型へのポインターの宣言によって使用され、さらに 6 バイトが malloc 関数によって使用され、残りの 2 バイトが他のプログラムによって占有されているとします。今、realloc 関数を実行するとポインターが指しているメモリを拡張するために、メモリ内で 10 バイトを検索し、それが利用できない場合は、ヒープ領域から 10 バイトのメモリを割り当て、malloc の内容をコピーして、ヒープ領域内の新しく割り当てられたメモリ領域に貼り付けます。次に、mallocに格納されているメモリを削除しますよね?
メモリが使用できないため、realloc() は NULL ポインターを返しますか? 権利はありません!?メモリ割り当ての権利のためにヒープ領域に移動しますか?NULL ポインターを返しませんよね?
私の言うことを聞いてください: | 01 | 02 | 03 | 04 | 05 | 06 | 07 |08 |09 | 10 |
これをメモリ ブロックと見なします。01 から 06 は malloc() 関数によって使用され、07 と 08 は空きで、最後の 2 ブロック、つまり 09 と 10 は他のプログラムのメモリによって使用されていると仮定します。realloc(p,10) を呼び出すと、10 バイトが必要ですが、空いているバイトは 2 バイトしかないので、realloc は何をしますか? NULL ポインタを返すか、ヒープ領域からメモリを割り当てて、メモリの 01 ~ 06 ブロックの内容をヒープ領域のそのメモリにコピーする方法を教えてください。