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

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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