segfault bei new bzw malloc



  • hmm das problem taucht nicht nur dort auf. Kann es sein das ein programm rumspinnt wenn zuviele new operationen auf einmal benutzt werden? Irgendwie macht das programm bei mehreren solcher new's macken. Hoffe mir kann da jemand helfen.



  • Vermutlich hast du dir vorher irgendwo durch einen Schreibzugriff über Arraygrenzen hinweg den Heap zerlegt.



  • hmmm mittlerweile hab ich bei allem was ich geändert habe am Source vor jedem schreibzugriff auf ein array sogar ein assert drinnen das mir abprüft ob die grenzen überschritten werden.... Aber selbst dort ist nie was passiert.



  • was heißt den:

    data = (unsigned char *)malloc(s); //<-- da crashts
    

    wird "err on creating buffer" ausgegeben?
    oder gibs 'nen core-dump?

    Wievile Threads haste am laufen?



  • am laufen sind hmmm gute Frage, ich denke zu der Zeit so an die 20 Threads. Der Crash kommt vor allem im GDB (Debugger) auch ohne aber dort lässt er länger auf sich warten 😉 das programm segfaultet halt einfach.



  • Ist data Threadsicher ?
    Den Lock sehe ich erst nach dem new - nicht das da mehrere Threads gleichzeitig mit data arbeiten wollen



  • ja der wird ja dort erstmal initialisiert.

    Das problem ist halt das es nicht nur diese stelle ist, sondern es hier besonders häuffig auftritt. 😞



  • Ich hab mit multithreading herzlich wenig erfahrung aber der gezeigte Quellcode lässt erst mal keinen Schluss auf falschen Zugriff einer Variablen zu (sofern uint16_t kein Zeiger oder referenz ist).

    Also bleibt eigentlich nurnoch :

    Probleme mit dem Threading
    oder

    Vermutlich hast du dir vorher irgendwo durch einen Schreibzugriff über Arraygrenzen hinweg den Heap zerlegt.

    weitere möglichkeiten wären imHo ggf. noch wildes rumschreiben innerhalb des eigenen Speicherbereiches. Prüfe mal ob alle Zeiger richtig Initialisiert sind vor Verwendung und bei einem delete auf 0 gesetzt werden.

    Wenn das alles gesichert ist, darf einer der Threading spezies nen Kommentar zu geben 🤡



  • Fedaykin schrieb:

    ja der wird ja dort erstmal initialisiert.

    Das problem ist halt das es nicht nur diese stelle ist, sondern es hier besonders häuffig auftritt. 😞

    Wo den noch?

    Köntest Du auch mal den Teil posten wo der ctor aufgerufen wird und wie Du die klasse wieder freigibs. Stack oder new?



  • also vielen vielen dank für die viele hilfe.... ich denke das problem hat sich dahingehend geklärt das es einfach am Multithreading lag. Irgendwie scheint beim abbrechen der Threads was in die hose gelaufen zu sein 😞 es scheint jetzt ganz gut zu klappen, hab zwar wieder neue probleme aber da will ich mich selber erstmal dran festbeissen und wenn ich so nicht weiterkomme nachfragen.


Anmelden zum Antworten