System.AccessViolationException



  • Hallo,
    ich wollte heute mein Projekt fertigstellen und mal die .exe direkt ausführen. Wenn ich das Programm aus VC++2008 öffne geht es, wenn ich aber die exe in dem Debug Ordner öffne kommt immer ein Fehler von Windows(...exe funktioniert nicht mehr).
    Woran könnte das liegen das ich es nicht direkt öffnen kann?
    Andere kleiner Programm konnte ich so immer öffnen.

    P.S. Habe verschieden Header Datein in der Datei und einen Linker zum MySQL Server



  • Wenn Du irgendwas fertigstellen willst, solltest Du im Release-Modus kompilieren.

    Dennoch sollte deine Exe eigentlich funktionieren. Fehlen Dlls?



  • Fehlen Dlls?

    Oh wie Peinlich. Es fehlte eine dll.
    Aber was ich komisch finde ist das wenn ich das Programm ne Zeitlang nutze einfach aus dem nichts folgender fehler kommt:

    System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
    bei mysql_num_fields(st_mysql_res* )



  • Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

    Das steht da nicht umsonst.

    Hast du evtl. irgendwelche Sachen zu früh "entpinnt"? Überschreibst du Array-Grenzen? Gibst du vielleicht Dinge frei, und versuchst später trotzdem sie wieder zu verwenden?

    Können 100.000 Sachen sein.
    Viel Spass beim Suchen 🙂

    p.S.: wenns bei mysql_num_fields passiert, dann würde ich mal checken ob das übergebene "st_mysql_res" noch "OK" ist. D.h. noch nicht freigegeben wurde.



  • num_fields = mysql_num_fields(result);

    Wenn ich die Zeile auskommentiere dann funktioniert es.
    Die Zeile ist in einer bestimmten Funktion die ca 200mal aufgerufen wird.



  • Zu "st_mysql_res" finde ich irgendwie gar nichts.
    Also ich denke mir mal das st_mysql_res dann 200 mal in den Speicher schreibt und dann kein Platz mehr ist und er deshalb Versucht im geschützten Speicher zu schreiben.
    Aber wie kann ich den Speicher freigeben habe delet(result); versucht bringt aber nichts.



  • free_result(result)
    oder so in der richtung...

    warum benutzt du nicht mal selbst die doku?!
    http://dev.mysql.com/doc/

    bb


Log in to reply