Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » hp = realloc(???, 15);

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.04.2003, 14:20 Uhr
~newcomer[2]up to 20
Gast


Hallo, ich hab nur ne kurze Frage,
bei der Funktion realloc, muss ich da in den Klammern den Namen des Pointers der schon besteht, also vergrößert werden soll eintragen oder den Namen des neuen Pointers???
Besten Dank,

cu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2003, 15:05 Uhr
~Heiko
Gast


da musst du eigentlich den namen des pointers der auf den bereits allocierten Bereich zeigt in den klammern eintragen.

Ich würde an deine stelle aber den ganzen malloc krempel nicht benutzen und nur new und delete benutzen (ist einfacher, aber vorsicht entweder nur new oder nur malloc, die beiden vertragen sich nicht unbedingt), sonst verliert man leicht mal den überblick.
An deiner Stelle würde ich einfach den alten Speicherbreich löschen und einen neuen anlegen.
Im zweifel die zu rettenden werte erst in den neuen speicherbereich schreiben und dann erst löschen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2003, 16:56 Uhr
TBO




Zitat:

Ich würde an deine stelle aber den ganzen malloc krempel nicht benutzen und nur new und delete benutzen (ist einfacher, aber vorsicht entweder nur new oder nur malloc, die beiden vertragen sich nicht unbedingt), sonst verliert man leicht mal den überblick.



Programmiert newcomer denn in C++? Das hier ist doch auch ein C-Forum.
Richtig ist, daß malloc und free in C++ nach Möglichkeit nicht mehr verwendet werden sollten, weil sie mit Konstruktoren und Destruktoren nicht klarkommen.

Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.04.2003, 08:51 Uhr
~sxs
Gast


Moin,

realloc() ist eine Funktion, die auf verschiedenen Plattformen (fast immer auf Solaris) zu problemen führt. Da sind Speicherlöcher nur das geringste übel.
Allzu häfiger Gebrauch führt führt of zu Segmentierungsfehlern. Wenn man Buffer vergrößern will sollte man immer die langsamere Variante

malloc()
memcpy()
free()

verwenden.

ciao

SxS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.04.2003, 10:12 Uhr
virtual
Sexiest Bit alive
(Operator)


@sxs
Dies Behauptung einfach so in den Raum zu stellen, finde ich schon ziemlich gewagt. Ich kann SIe auch nicht nachvollziehen (und das, obwohl ich viel mit Sun Solaris zu tun habe) . Sicherlich sind zwei wesentliche Dinge zu beachten:
1. realloc ist für C, nicht C++ gedacht.
2. realloc will korrekt angewendet werden.

Ich denke, der häufigste Fehler in Verbindung mir realloc, der ganz gerne von Anfändern gemacht wird, ist, wenn man buffer vergrößern möchte, sowas zu schreiben:

C++:
buffer = realloc(buffer, new_size);


Dies führt insbes. dann, wenn realloc NULL zurückgibt, zu Speicherlöchern, natürlich auch zu Abstürzen, wenn man den Rückgabewert von realloc nicht prüft, bevor man damit arbeitet. Das ist aber kein realloc, sondern ein Programmierer Problem. Richtiger wäre:

C++:
temp =realoc(buffer, new_size);
if (NULL == temp)
{
    /* Fehlerbehandlung, ggf. mit buffer weiterarbeiten */
}
else
{
    buffer = temp;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: