C Pointer und realloc[geloest]

  • Themenstarter Themenstarter sw33tlull4by
  • Beginndatum Beginndatum
S

sw33tlull4by

Guest
Hallo!
Ich habe ein kleines Problem mit ein paar Pointern und den Speicherbereichen auf diie sie verweisen.
(echt beschaement, dachte ich koennte das von frueher her ein bischen besser X( )
Die Datei welche ich angehangen habe ich, hat die Aufgabe eine Eingabe einzulesen, ohne das die Gefahr eines Overflows besteht.
Diese Datei wird im restlichen Programm 2 mal aufgerufen.
Wenn ich einen String uebergebe der zu gross ist bekomme ich haue.
wenn der String klein genug ist, geht zwar alles gut aber ich bekomme die gleiche Fehlermeldung(siehe Anhang), wenn ich den Speicherbereich wieder mittels free() freigeben will.
Ohne geht es zwar gut aber dann habe ich Speicherlecks.
Und ich meine realloc richtig zu verwenden.
Ich habe es zeitweise auch so gemacht das ich nicht

datei = realloc(datei,sizeof(datei)*2);

sondern

swap = realloc(datei,sizeof(datei)*2);
free(datei);//hier geht es gut
datei = swap

getippt habe.
Aber das resultet ist das gleiche.
Wenn ich einen Pointer zurrueck gebe wird es auch nicht besser.
Vielleicht sieht einer von Euch meinen Fehler.
Danke im Vorraus .
mfg

sw33t
 
Ich weiß jetzt nicht, ob das der ganze fehler ist... aber einer ist auf jeden Fall sizeof(datei). Denn sizeof(datei) gibt die dir groeße von datei wieder. datei ist ein Pointer, ergo 4 Bytes groß-> ich bezweifle, dass das die deine Absicht war. Versuchs mal mit strlen(datei).
 
Hi!
Danke fuer die Antwort.
Das mit sizeof() und dem unterschied zwischen sizeof(pointer) und sizeof(*pointer) hatte ich ganz vergessen.
Aber leider ist strlen() nicht das was ich gesucht hatte.

Ich habe nach einiger Suche herausgefunden das das was ich gesucht habe nicht moeglich ist.
Kann ich natuerlich lange suchen......
Es gibt keine Funktion in C welche die Groesse eines von einem Pointer referenzierten Speicherblocks zurrueckgeben kann.

Also habe ich die Groesse des Arrays mituebergeben.
Darueber hinaus war noch das Problem das realloc() keinen zusammenhaengen Speicherblock erstellt.(dachte bis dato das das anders ist)
Der angehaengte Code muckt bis jetzt nicht auf.
 
Zurück
Oben