-
malloc / realloc Speicherreservierung
Hallo,
ich habe eine frage zu C bzw. ein problem
ich möchte mir speicher reservieren für ein array
angefangen mit 10*sizof(int) (40bytes) und den dann immer um 10er blöcke (40)erweitern, wie oft das geschehen soll/muss kann ich nicht vorhersagen.
nun grundsätzlich funtioniert es, jedoch nur bis 267*4 Bytes danach bekomme ich immer speicherzugriffsfehler, warum ?
wenn ich gleich einen block von ca. 1MB reserviere dann gibts keine problem,
nun hab ich auch probiert ca. 14mb zu mit malloc zu reservieren und dann noch einmal 14mb mit realloc dazu, gibt keine schwierigkeiten bis ich anfange den bereich zu beschreiben den ich mit realloc reserviert habe.
hat jemand einen tipp oder ne idee ?
danke gruß martin
-
Benutzt du den Zeiger, den dir realloc() zurückgibt oder den von malloc()?
Ersteres wäre laut Manpage korrekt, beim Aufruf von realloc() kann sich die Stelle, an der deine Daten im Speicher sind, ändern und deshalb darf der Rückgabewert von malloc() dann nicht mehr weiterverwendet werden.
-
hört sich so ähnlich an wie mein thread ein bißchen weiter unten (Arraygrößen)
@ripper: ich mache bei mir u.a.
BYTE *p = malloc(1);
und später dann z.b. realloc(p, dwSize);
bei 300 bytes funzt alles, bei 3000 nicht mehr....
-
Wie gesagt, realloc() gibt dir die neue Speicheradresse deiner Daten zurück, also wenns
p = malloc(...);
heisst, musst du später auch
p = realloc(...);
verwenden.
rosenstolz hat dir in "deinem" Thread einen Codeauschnitt zur Verfügung gestellt
-
MUSS es p = realloc sein?
reicht nicht eigentlich auch realloc(p, .... ?
müsste, schließlich funzt mein programm ja mit z.b. 300 bytes
-
Original geschrieben von Camel69
MUSS es p = realloc sein?
reicht nicht eigentlich auch realloc(p, .... ?
müsste, schließlich funzt mein programm ja mit z.b. 300 bytes
Ja. Siehe auch man realloc. Das dein Programm funzt stimmt nicht, bei 3000 bytes stürzt es schließlich ab.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen