kleine pointer frage (was beim speichern des pointers falsch ist?)



  • Guten Tag,

    hiermit rufe ich eine Funktion aus meiner Klasse auf:

    mainWindow->getcbaf(&startnet);
    

    (ein Teil) der Header Datei meiner Klasse sieht so aus:

    typedef void (*cba)(void);
    
    void getcbaf(cba startnet1);
    

    und mit dieser Funktion sol der Zeiger eigentlich gespeichert werden:

    void MainWindow::getcbaf(cba startnet1) {
    	startnet=startnet1;
    
    }
    

    hierbei stürzt mein Programm leider ab. Eine kleine Hifle wäre super 🙂 Vielen Dank 🙂



  • Wo genau gibt es einen Absturz? - Bist du mal mit dem Debugger durch gegangen?



  • Was ist startnet ? Und warum eine Setter-Funktion getcbaf nennen?

    Über die Art des Absturzes wären Informationen auch nützlich. Bist du schon mit dem Debugger durchgegangen und hast die genaue Stelle ausfindig gemacht?

    Edit: Grr, zu langsam. 🙂



  • ja das stimmt die Namensgebung ist nicht ganz richtig.

    gdb gibt mir folgendes aus:

    Starting program: C:\data\projects\nets/main.exe
    [New Thread 2480.0xf40]
    [New Thread 2480.0xc64]

    Program received signal SIGSEGV, Segmentation fault.
    0x00402db7 in MainWindow::getcbaf (this=0x0, startnet1=0x40180e <startnet()>) at win_m.cpp:26
    26 startnet=startnet1;
    (gdb)

    Eventuell ist noch zu erwaehnen, dass meine Klasse von Gtk::Window abgeleitet ist.



  • Du scheinst auf ungültigen Speicher zuzugreifen.

    Zeig mal den Code so gut, wie möglich, wie du ihn benutzt.



  • void MainWindow::getcbaf(cba startnet1) {
    startnet=startnet1;

    }

    Tja mein freund du greifst nicht mit einem zeiger darauf sondern erstellst eine KOPIE.

    Ein zeiger würde mit einem * funktionieren.
    Du möchtest ja sicherlich startne1 auf den anderen zeigen lassen.

    Probieres mit * sowohl bei der Paramter übergabe sowie bei der zuweisung.



  • BesucherNachtUm1auslangew schrieb:

    void MainWindow::getcbaf(cba startnet1) {
    startnet=startnet1;

    }

    Tja mein freund du greifst nicht mit einem zeiger darauf sondern erstellst eine KOPIE.

    Ein zeiger würde mit einem * funktionieren.
    Du möchtest ja sicherlich startne1 auf den anderen zeigen lassen.

    Probieres mit * sowohl bei der Paramter übergabe sowie bei der zuweisung.

    Er benutzt einen Funktionszeiger.. Er macht eine Kopie eins Funktionszeigers, was überhaupt kein Problem ist.


Anmelden zum Antworten