Malloc- und Realloc-Beziehung, Wie wird damit umgegangen, wenn der erforderliche Speicherplatz im Speicher nicht verfügbar ist [duplizieren]

Mögliche Duplikate:
Realloc- und Malloc-Funktionen

#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);
   }
}

Nehmen Sie dieses Beispiel für den Code an, nehmen Sie an, dass der gesamte Speicher 10 Bytes beträgt und 2 Bytes von der Deklaration des Zeigers verwendet werden, um int und weitere 6 Bytes von der Malloc-Funktion einzugeben. Die restlichen 2 Bytes werden von anderen Programmen belegt, wenn ich jetzt die Realloc-Funktion ausführe Um den Speicher zu erweitern, auf den der Zeiger zeigt, sucht er nach 10 Bytes im Speicher. Wenn er nicht verfügbar ist, reserviert er 10 Bytes Speicher aus dem Heap-Bereich und kopiert den Inhalt von malloc und fügt ihn in den neu zugewiesenen Speicherbereich im Heap-Bereich und ein dann lösche den speicher in malloc oder?

Gibt realloc () einen NULL-Zeiger zurück, weil der Speicher nicht verfügbar ist? Kein Recht!? Es geht um Heap-Bereich für die Speicherzuweisung, oder? Es wird kein NULL-Zeiger zurückgegeben, oder?

Hör mir zu: | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |

Betrachten Sie dies als Speicherblöcke: Nehmen Sie an, dass 01 bis 06 von malloc () func verwendet wurden, 07 und 08 frei sind und die letzten beiden Blöcke i, e 09 und 10 vom Speicher anderer Programme verwendet werden. Wenn ich nun realloc (p, 10) aufrufe, brauche ich 10 Bytes, aber es gibt nur 2 freie Bytes. Was macht realloc? Geben Sie einen NULL-Zeiger zurück, oder weisen Sie Speicher aus dem Heap-Bereich zu, und kopieren Sie den Inhalt der Speicherblöcke 01 bis 06 in diesen Speicher im Heap-Bereich. Lassen Sie es mich wissen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage