Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 :)

Geschrieben
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.

Geschrieben

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.

Geschrieben

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)

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...