Debug Assertion failed!



  • int encoderwerte = new int[maxarraylaenge];
    FILE
    pFile;
    float u = 0;
    Visa.measure_U_B_Referenzierung(&u, 4, 4);

    if (c == 'y')
    {
    float *datenreihen_Y = new float[maxarraylaenge];
    // Alle Einträge im Datensatz mit nullen setzen
    for (int i = 0; i < maxarraylaenge; i++)
    {
    datenreihen_Y[i] = 0;
    }
    pFile = fopen ("D:\\user\\Bill\\SCE\\Daten\\Fahrt\\werte.txt","w");
    int i = 0;
    //int k = 0;
    for (int j = 0; j < anzahlwiederholungen; j++)
    {
    i = 0;
    do
    {
    MyTable.MoveBy(0, grob_schrittweite, 0);
    MyTable.setY_ENC(MyTable.getY_ENC() + grob_schrittweite);
    encoderwerte[i] = MyTable.getY_ENC();

    // Messen!
    Visa.measure_U(&datenreihen_Y[i], 4, 4);

    fprintf(pFile, "%d \t%6.4f\n", encoderwerte[i], datenreihen_Y[i]);
    i++;
    }
    while((datenreihen_Y[i-1] == U_DC) && (i < maxschritte));

    fprintf(pFile, "\n");
    //k = grob_schrittweite * i; // * anzahl der Messungen

    MyTable.MoveTo ( 0 , 0 , 0 ) ;
    MyTable.setY_ENC(0) ;
    }
    fclose(pFile);
    delete encoderwerte;
    delete datenreihen_Y;



  • Das ist C, nicht C++.



  • Kompilierbares Minimalbeispiel, nicht irgendwelche Code-Fetzen.



  • hier steht, dass fopen einen nullpointer (also NULL, genau das was bei dir der fall ist) liefert, wenn die datei nicht geöffnet werden konnte. hättest du dir auch ganz schnell selbst beantworten können.

    ich gebe daddy_felix recht, das hat mit c++ nichts am hut.



  • Danke



  • Du willst ne Lösung?

    Compilier im Release Modus 😉



  • was soll das heissen Skym0sh0 ?



  • Assertions sind Konstrukte, die nur im Debug-Modus des Compilers ausgeführt bzw. geprüft werden (Bedingungen werden sichergestellt).

    So nach dem Motto:

    #ifdef DEBUG
    #    define assert(X) if ( X != true ) {throwError();}
    #else
    #    define assert(X) (void)(0)
    #endif
    
    // ...
    int i = get_user_input(); // schon falsches Beispiel, assert ist für Programmierfehler gedacht
                              // in etwa mit Checked-/Unchecked-Exceptions aus Java vergleichbar.
    assert(i < 10);
    

    Im Release-Modus haben diese Anweisungen jedoch keine Auswirkungen mehr.

    In deinem Fall wird der Fehler wahrscheinlich einfach nicht gesehen und das Programm stürzt nicht mit solch einer Fehlermeldung ab.
    Nachteil: Du hast den Fehler selbst nicht entfernt und er wird dir früher oder später den Hals brechen. War von meiner eher sowas wie Sarkasmus.



  • daddy_felix schrieb:

    Das ist C, nicht C++.

    Das ist eindeutig C++. Auch schlechtes C++ ist C++. Auch "C with class" ist C++, auch "C with cout" ist C++, "C++ with printf" ist C++, ein Grossteil von C ist C++, ...



  • mich wundert es dass du keine fehler bekommst beim löschen mit delete von mit new[] erzeugten feldern. bist du zufälligerweise masochist?



  • Ich danke euch allen für eure Bemühungen!



  • Skym0sh0 schrieb:

    #    define assert(X) if ( X != true ) {throwError();}
    

    lol


Anmelden zum Antworten