Gast
#5224212
Moin, kurze Frage. Was mache ich falsch? Wenn ich den Pointer übergebe, stürzt das Programm ab.
1 | |
Mache ich es via. Array, klappt es.
1 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
|
Anzeige
|
Pointer übergabe führt zum Absturz?
Gast
#5224212
Moin, kurze Frage. Was mache ich falsch? Wenn ich den Pointer übergebe, stürzt das Programm ab.
Mache ich es via. Array, klappt es.
das Programm kann nicht abstürzen, das Unterprogramm wird nirgends aufgerufen Ansonsten liegt der String vielleicht im ROM? Welcher Prozessor/Compiler?
Gast
#5224221
Hier noch mal komplett.
Ist die Funktion so vollständig? Es fehlt wenigstens die letzte schließende Klammer. Überprüfe mal ob inBuf in der Funktion nicht verändert wird und wenn nicht mache sie const. Wenn du einen Pointer mit einem String Literal initialisierst dann zeigt der Pointer auf einen const String und dementsprechend sollte der Pointer hier ebenfalls const sein. Ansonsten zeig mal wie du die Funktion aufrufst mit beiden Varianten. Edit: Wie schon vermutet schreibst du in deinen Pointer der eigentlich const sein müsste:
Gast
#5224229
Bei der Zeigervariante liegt dein String eventuell im ROM/Flash. Bei der Arrayvariante liegt dein String im Array, also RAM. Je nach Zielsystem kann nicht einfach auf das ROM/Flash zugegriffen werden. Welches ist dein Zielsystem? Dein Beispiel mit einem PC-Programm umgesetzt funktioniert :-)
Gast
#5224233
DanVet schrieb: > Bei der Zeigervariante liegt dein String eventuell im ROM/Flash. > Bei der Arrayvariante liegt dein String im Array, also RAM. > > Je nach Zielsystem kann nicht einfach auf das ROM/Flash zugegriffen > werden. > Welches ist dein Zielsystem? > > Dein Beispiel mit einem PC-Programm umgesetzt funktioniert :-) Ich nutze es auf dem PC. DevC++
Gast
#5224256
Ihr hattet Recht. Wenn ich vorher für den Pointer Speicher reserviere, klappt es!
Steffen W. schrieb: > char *cmdBeginn_ = malloc(sizeof(char)*cmdStrLen); > strcpy(cmdBeginn_,srchCmd); Da ist kein Platz für die 0-Terminierung ... Du brauchst 1 Byte mehr als der String lang ist. Sicherheitshalber sollte man eh kein strcpy verwenden sondern strncpy
Gast
#5225221
Mal in's blaue geraten : Dein C-Compiler Bildet aus den ASCII-Werten von +ADD eine 32-bittige Zahl und castet sie auf eine Speicheradresse. Auf diese Adresse zeigt dann Dein Pointer. Das ist natürlich gequirlter Quatsch und gar nicht, was Du willst.
Gast
#5225376
Steffen W. schrieb: > int8_t srchCmd(char *inBuff, char *srchCmd) besser
dann sieht man, was man ändern darf und was nicht. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|