Malloc. c Crash nach "new"



  • Hallo zusammen!
    Ich habe komishe Fehelr im einfachen Graph-Beispiel:

    class GraphNode{
    
    protected:
    	uint32_t id;
    	std::vector <GraphNode> children;
    
    public:
    
    GraphNode(uint32_t idN){
    		id = idN;
    		std::cout << "GraphNode constructed nr " << id<< std::endl;
    	}
    }
    

    dann habe ich eine dfanode extends grahpnode und simple Factory von Nodes:

    class DfaNode : public GraphNode{
    // unwesentlich
    ...
    }
    
    class DfaManager {
    	uint32_t nodesAmount;
    	DfaNode start, end;
    
    public:
    	DfaManager(): start(0), end(0xFFFFFFFF){
    		nodesAmount = 1;
    	};
    
    inline void addChildtoStart(uint256_t& transitionMarker){
    
    	GraphNode * newNode = new GraphNode(nodesAmount);
    
    	nodesAmount ++ ;
    	start.addChild(newNode,transitionMarker);
    	;
    }
    

    Ich kriege eine cerr- Meldung:

    malloc.c:2453: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) -
     __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || 
    ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof 
    (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) &
     ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&
     ((unsigned long)old_end & pagemask) == 0)' failed.
    

    Von Printouts bin ich ziemlich sicher das irgendwas in Zeile

    ..
    cout << " buu" << endl;
    GraphNode * newNode = new GraphNode(nodesAmount);
    cout << " boo" << endl;
    ...
    

    shieff geht, z.B. hier wäre "buu" ausgegeben und keine "boo", und Programm läuft nicht weiter.
    Kann mir jemand mit dem Zeug bitte helfen ?
    MFg



  • Der Fehler ist vorher in deinem Code. Du schreibst an eine Speicherstelle, die dir nicht gehört (z.B. schreiben nach delete).





  • Don’t use f*cking pointers.

    Unterscheidet sich stark von:

    Pointers must not own resources.


  • Mod

    knivil schrieb:

    Don’t use f*cking pointers.

    Unterscheidet sich stark von:

    Pointers must not own resources.

    Das ist aber ein guter rhetorischer Heißmacher 🙂

    Diese ganze mathematisch korrekte Sprechweise, bei der man nie Absolute benutzt, weil man sich doch irgendwie irgendeine Ausnahme vorstellen kann, kommt bei denen für die diese Aussagen wichtig wären nämlich genau falsch herum an und bestätigt sie in ihrem Verhalten.


Anmelden zum Antworten