xk4fu Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 Es kann halt eben nur passieren, dass der Speicher bei einem nächsten Alloctieren wieder überschrieben wird, deswegen sollte man das am Schluss machen, wenn alles durch ist und dann den Zeiger auf NULL schreiben. (Dann ist er frei und leer.) naja genau, meine methode wird aber nur einmal aufgerufen (wenn die sms verschickt wird) d.h. den free dann aufzurufen ist ja quasi umsonst, weil dann nichts mehr passiert; deswegen wollte ich den wert zwischenspeichern; jetzt kommen wir wieder ganz zum anfang, dass ein free sich bei meiner methode nicht rentiert Zitieren
TDM Geschrieben 27. August 2008 Geschrieben 27. August 2008 aber: strcpy geht bei mir nicht mehr, wenn ich nur char pointer verwende Türlich. Nur musst du die Dstinationpointer auch initialisieren. deswegen wollte ich den wert zwischenspeichern; jetzt kommen wir wieder ganz zum anfang, dass ein free sich bei meiner methode nicht rentiert Dann lass ihn in dem pointer und gut ist. free rufst du dann irgendwann am programmende auf und nicht am Methodenende. Zitieren
Klotzkopp Geschrieben 27. August 2008 Geschrieben 27. August 2008 Wenn das Array groß genug ist, dass man das Ergebnis sicher dort reinkopieren kann (strcpy), dann hättest du auch gleich sprintf mit dem Array benutzen können, und würdest den Zeiger gar nicht brauchen. Zitieren
xk4fu Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 stimmt dann aber mal die frage: wie kann ich char *stringSaved; nach char *stringSavedFree; mit hilfe von strcpy kopieren? da er mir so die fehlermeldung bringt: Error while dumping state (probably corrupted stack) Zitieren
Klotzkopp Geschrieben 27. August 2008 Geschrieben 27. August 2008 wie kann ich char *stringSaved; nach char *stringSavedFree; mit hilfe von strcpy kopieren? Zeiger haben keinen eigenen Inhalt. Du kannst also in einen Zeiger gar nichts kopieren. Du kannst nur einen Zeiger auf einen Speicherbereich zeigen lassen, in den du dann etwas reinkopieren kannst. Wenn du (bei deinem ursprünglichen Code) schreibst stringSaved = stringSavedFree; dann heißt das einfach nur, dass der Zeiger stringSaved jetzt auf das Array stringSavedFree zeigt. Wenn also das Array zerstört wird (weil es beispielsweise aus dem Scope läuft), wird auch der Zeiger ungültig. Was du am Array änderst, wirst du auch am "Inhalt" des Zeigers ändern, und umgekehrt. Wenn du einem Zeiger nie etwas zuweist, ist er "uninitialisiert". Ein Zugriff auf einen solchen Zeiger verursacht üblicherweise Schutzverletzungen bzw. Segmentation Faults. Bevor du also mit strcpy etwas in den Zeiger stringSavedFree kopieren kannst, musst du ihn auf ordentlich alloziierten Speicher zeigen lassen. Sei der nun mit malloc geholt oder ein Array oder was auch immer. Ein Zeiger allein ist nutzlos. Zitieren
xk4fu Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 ich machs jetzt also so: char *stringSaved; char *stringSavedFree; stringSavedFree = malloc(1000); stringSaved = "Huhu"; strcpy(stringSavedFree, stringSaved); stringSaved = "Jukuhu"; printf("\n%s\n", stringSaved); printf("\n%s\n", stringSavedFree); in stringSaved steht Jukuhu drin und in stringSavedFree Huhu also müsste es passen oder jetzt muss ich dann aber für stringSavedFree "free" auch wieder aufrufen, da ja malloc auch speicher variabel reserviert, oder Zitieren
TDM Geschrieben 27. August 2008 Geschrieben 27. August 2008 Du kannst auch gleich beide Strings mit 160 Zeichen (m)alloctieren. Mehr passt doch in eine SMS so und so nicht rein. Zitieren
xk4fu Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 das geht über anysms raus und die url wird von wget aufgerufen anysms selbst stückelt die sms, sollte der text mehr als 160 zeichen haben, von daher kann ich hier auch 1000 zeichen reinstecken Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.