vector verursacht speicher-crash



  • Hallo,

    ich arbeite zur Zeit an meinem Wrapper und hänge gerade an einer Funktion einer Klasse, die einen vector erzeugen und zurückgeben soll. Im einzelschrittdebugging funktioniert alles wunderbar, bis der code aus der native c++ funktion wieder in den managed teil springt und dort verendet, weil in dem zurückgegebenen vector nur noch mist steht.

    selbst bei einem mit new erzeugten und übergebenen std::vector (sowohl aus der native, als auch aus der managed funktion heraus) verendet der code aufgrund von speichermurks direkt sobald der vektor angesprochen wird.

    {
       void doSomethingManaged();
    }
    

    hier mal drei beispiele, die so gerade nicht funktionieren

    typedef struct mystruct
    {
       public:
          int any;
          short anyother;
          ...
    }mystruct;
    
    std::vector<mystruct> doSomething()
    {
       std::vector<mystruct> m = std::vector<mystruct>();
       ...
       //fill m with data
       ...
       return m;
    }
    
    void doSomethingManaged()
    {
       std::vector<mynamespace::mystruct> mv = mynamespace::doSomething();
       //mystruct is corrupted here
    
       ...
       //crash on leaving mehtod body in vector.h
    }
    

    Variante 2

    typedef struct mystruct
    {
       public:
          int any;
          short anyother;
          ...
    }mystruct;
    
    std::vector<mystruct>* doSomething()
    {
       std::vector<mystruct>* m = new std::vector<mystruct>();
       ...
       //fill m with data
       ...
       return m;
    }
    
    void doSomethingManaged()
    {
       std::vector<mynamespace::mystruct>* mv = mynamespace::doSomething();
       //mystruct is corrupted here
    
       ...
       //crash on leaving mehtod body in vector.h
    }
    

    Variante 3

    typedef struct mystruct
    {
       public:
          int any;
          short anyother;
          ...
    }mystruct;
    
    void doSomething(std::vector<mystruct>* m)
    {
       ...
       //fill m with data crashes, memory coruption
       ...
       return m;
    }
    
    void doSomethingManaged()
    {
       std::vector<mynamespace::mystruct> mv = std::vector<mynamespace::mystruct>();
       mynamespace::doSomething(&mv);
       ...
    }
    

    Ich habe keine Ahnung warum, geschweigedenn wie, jedoch knallt es nur , dafür aber immer in der clr, in reinem c++ läuft das wie gebuttert.

    Header müssten alle drin sein, da diese aus dem header der nativen klasse kommen oder hat cli einen eigenen vector header?

    Ein Bug in der C++/ClI oder übersehe ich hier etwas?



  • Kann den Fehler nicht reproduzieren, bei mir geht alles so wie es soll.
    Zeig mal mehr Code, der Fehler liegt vermutlich irgendwo anders.


Anmelden zum Antworten