char zeiger



  • Hi,

    ganz kurze Frage:

    Ich habe eine Variable:

    char *test;

    Wenn ich jetzt z.B. direkt darunter noch eine initialisieren möchte, so dass ich dann habe:

    char *test;
    char *test1;

    dann bekomme ich das:

    3 [main] project_name 6208 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
        944 [main] project_name 6208 open_stackdumpfile: Dumping stack trace to project_name.exe.stackdump
     933447 [main] project_name 6208 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
     942020 [main] project_name 6208 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
    

    Weiß jemand woran das liegen kann, oder müsste ich dafür code posten?

    Grüße,
    sneeker



  • An den Deklarationen liegt es sicher nicht, sondern an folgendem Code. Du kannst mit dem Debugger leicht rausfinden, welche Stelle Ärger macht. Aber poste ruhig mal etwas Code.



  • Hm...wüsste nicht welchen Code ich dann nehmen sollte, denn wie ich gerade gemerkt habe, ist es total egal, ob ich danach

    char *test
    

    oder

    int a;
    

    schreibe.

    Kann das damit zusammenhängen, dass ich sprintf benutze?

    char *test;
    sprintf(test, "blablu %d", count);
    

    Wie oben beschrieben, funktioniert es, aber wenn ich zwsichen test und sprintf eine weitere Variable einfüge, dann bekomme ich die Fehlermeldung.



  • Der Zeiger ist zwar deklariert worden, zeigt aber noch gar nicht auf gültigen Speicher! Du darfst darauf kein sprintf anwenden. Du schreibst dann einfach irgendwo hin, je nachdem was gerade zufällig an der Stelle im Speicher steht, an der die Zeiger-Variable abgelegt ist (oder viel wahrscheinlicher: du kriegst einen Fehler).

    Warum nicht einfach so?

    char test[100];
    


  • Jop, das wars.
    Danke schön



  • Schön, dass es klappt.

    sprintf wird erst dann wieder gefährlich, wenn du einem String test[100] einen String >100 Zeichen zuweisen willst. Also achte immer darauf, Speicherplatz großzügig (bzw. ausreichend) zu verteilen. Und wenn du im Vorfeld nicht weißt, wieviel Speicher dein String braucht, kannst du dynamisch allozieren mit malloc, nur so als Stichwort...


Anmelden zum Antworten