PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : malloc / realloc Speicherreservierung



rosenstolz
12-12-2002, 11:52
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

The Ripper
12-12-2002, 12:18
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.

Camel69
12-12-2002, 18:41
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.... :confused:

The Ripper
12-12-2002, 20:12
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 ;)

Camel69
12-12-2002, 20:26
MUSS es p = realloc sein?
reicht nicht eigentlich auch realloc(p, .... ?
müsste, schließlich funzt mein programm ja mit z.b. 300 bytes

tkortkamp
12-12-2002, 20:33
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.