Völlig unklares Programmverhalten



  • Folgendes habe ich geschrieben
    Headerdatei

    int asn180Matrix[numberOfASNAttributes][number10SecIntervals];
    

    Cpp-Datei:

    void StatisticsObject::updatePoisson180Matrix( int* autolartVector )
    //...
    for( int i = StatisticsObject::numberOfPoissonAttributes; i < StatisticsObject::numberOfPoissonAttributes + StatisticsObject::numberOfASNAttributes; ++i ) {
    		asn180Matrix[i][asn180Index] = autolartVector[i];
    		cout << "autolartVector " << i << ": " << autolartVector[i] << endl;
    		cout << "asn180Matrix   " << i << ": " << asn180Matrix[i][asn180Index] << endl;
    	}
    

    Und das hier ist die Ausgabe:

    autolartVector 2: 20
    asn180Matrix 2: 0
    autolartVector 3: 80
    asn180Matrix 3: 80

    Wie kann denn sowas passieren?


  • Mod

    HändyÄndy schrieb:

    Wie kann denn sowas passieren?

    Wieso nicht? Was hättest du denn erwartet?



  • Höchstwahrscheinlich ein OutOfIndex-Zugriff auf das Array, d.h. die Indizes stimmen nicht.
    Am besten debuggen und die Indizes dir ausgeben lassen.

    Alternativ std::array bzw. std::vector benutzen!



  • Ich bekomme beim Ausführen auf folgenden Fehler, obwohl das Programm danach nicht sofort abstürzt:

    DDoSS(89084) malloc: *** error for object 0x500190: double free
    *** set a breakpoint in malloc_error_break to debug
    DDoSS(89084) malloc: *** error for object 0x500180: double free
    *** set a breakpoint in malloc_error_break to debug

    Wie kann ich herausfinden wo dieser Fehler auftritt?



  • Steht ja in der Fehlermeldung.

    *** set a breakpoint in malloc_error_break to debug



  • Th69 schrieb:

    Höchstwahrscheinlich ein OutOfIndex-Zugriff auf das Array, d.h. die Indizes stimmen nicht.
    Am besten debuggen und die Indizes dir ausgeben lassen.

    Alternativ std::array bzw. std::vector benutzen!

    Bin ich schlecht informiert oder gibt es array nur bei Boost?



  • Array gibt es in Boost oder im TR1.



  • Janjan schrieb:

    Array gibt es in Boost oder im TR1.

    OK, C++0x, was ist da dann der Unterschied zu std::vector?


  • Administrator

    wxSkip schrieb:

    Janjan schrieb:

    Array gibt es in Boost oder im TR1.

    OK, C++0x, was ist da dann der Unterschied zu std::vector?

    TR1 ist nicht C++0x, sondern der Technical Report 1. Die meisten Kompiler unterstützen den TR1 schon seit etwas längerem.

    std::tr1::array und boost::array wrappen ein C-Array und machen es weniger flüchtig. So kann man nun einfach Arrays kopieren. Bieten auch begin() , end() , usw. an oder zum Beispiel at(std::size_t) .

    Schau dir einfach mal die Referenz von boost::array an:
    http://www.boost.org/doc/libs/1_43_0/doc/html/boost/array.html



  • Dravere schrieb:

    wxSkip schrieb:

    Janjan schrieb:

    Array gibt es in Boost oder im TR1.

    OK, C++0x, was ist da dann der Unterschied zu std::vector?

    TR1 ist nicht C++0x, sondern der Technical Report 1. Die meisten Kompiler unterstützen den TR1 schon seit etwas längerem.

    std::tr1::array und boost::array wrappen ein C-Array und machen es weniger flüchtig. So kann man nun einfach Arrays kopieren. Bieten auch begin() , end() , usw. an oder zum Beispiel at(std::size_t) .

    Schau dir einfach mal die Referenz von boost::array an:
    http://www.boost.org/doc/libs/1_43_0/doc/html/boost/array.html

    Ach so, ein statisches Array. Danke! 👍


Anmelden zum Antworten