-4

重複の可能性:
Malloc と Realloc の関係、必要なスペースがメモリ内で利用できない場合の処理​​方法

#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 ブロックの内容をヒープ領域のそのメモリにコピーする方法を教えてください。

4

0 に答える 0