void Zeiger



  • Hallo,

    mein Programm bleibt hängen wenn ich folgenden Code ausführe, und ich verstehe (noch) nicht warum:

    funktion(void*,void*);
    
    int main(){
     char* a = "aaa";
     char* b = "bbb";
     funktion(a,b);
    }
    
    funktion(void* a, void* b) {
      char* c1 = (char*) a;
      char* c2 = (char*) b;
      ...
    }
    

    Da es sich um einen void Zeiger handelt muss ich doch zunächst parsen, denn ich
    kann ja nicht einfach z.B. if(a[2] == 'i') abfragen.

    Für Aufklärung vielen Dank im voraus!



  • das programm bleibt bestimmt nicht "hängen", da ist gar kein Wiederholungskonstrukt drin. Was meinst du? Es stürzt ab? An dem Code kann ich nichts sehen was zum Absturz führen könnte. Ansonsten mach mal ein "minimal aber komplett"-Beispiel, wo das Problem auch auftritt.



  • Schon mal was von einem "Debugger" gehört?



  • muss die <funktion> unbedingt void* als args haben? char* tuts auch und besser.

    gdb (gnu debugger) ist meine wahl.



  • c.rackwitz schrieb:

    gdb (gnu debugger) ist meine wahl.

    Nicht der Beste, aber besser als nix. Du nutzt bestimmt "Linux"?



  • also ich find ihn klasse. er mag keine klickibunti GUI haben aber dafür ist er einfach zu bedienen und macht genau was ich will.
    nein, ich code noch unter windows. aber das heißt nicht, dass ich gcc und gdb nicht zu schätzen weiß.



  • vielleicht liegts daran, daß funktion() schreibend auf den speicher zugreift, auf den die argumente zeigen. da funktion() ja mit zeigern auf stringkonstanten aufgerufen werden könnte dies zu einem absturz führen.

    die lösung des problems wäre dann, die argumente anstatt

    char* a = "aaa";
    char* b = "bbb";
    

    so zu deklarieren:

    char a[] = "aaa";
    char b[] = "bbb";
    

    keine ahnung ob's was bringt, aber könnt ja sein...



  • c.rackwitz schrieb:

    also ich find ihn klasse. er mag keine klickibunti GUI haben aber dafür ist er einfach zu bedienen und macht genau was ich will.
    nein, ich code noch unter windows. aber das heißt nicht, dass ich gcc und gdb nicht zu schätzen weiß.

    Probier mal "OllyDbg"



  • ja den hab ich auch. hm aber wenn ich eh grad in c code, ist gdb besser weil ich dann näher an der sprache als am bytecode bin.

    *konfusius mit seinem tipp zustimm*


Anmelden zum Antworten