Wywołanie delete na tablicy wskaźników wysypuje program

0

Dzień Dobry !

Mam taki problemik z Qt i klasą Chart ( do rysowania wykresów ). Pokaże na kawałku kodu o co chodzi ( wysypuje to program, jak najbardziej okrojone aby było jak bardziej czytelne : )) :

deklaracje:

    QLineSeries* X[100];
    QLineSeries* Y[100];
    QLineSeries *series1;

w konstruktorze:

          for(int i = 0; i < 100 ; i++){
             X[i] = nullptr;
             Y[i] = nullptr;
         }
         series1 = new QLineSeries();

funkcja którą jak się wywoła dwa razy to program się sypie:

 void MainWindow::oblicz(){

    chart2->removeAllSeries();

    int i=0;
    *series1 << QPointF(0,0) ;

    for(i = 0 ; i <= 2 ; i++){

        if(X[i]){
            delete (X[i]);
            X[i] = nullptr;
        }

        if(Y[i]){
            delete (Y[i]);
            Y[i] = nullptr;
        }

        X[i] = new QLineSeries();

        Y[i] = new QLineSeries();

        *(X[i]) << QPointF(2,2) << QPointF(3,3) ;

        *(Y[i]) << QPointF(4,4) << QPointF(5,5);

        chart2->addSeries(X[i]);
        chart2->addSeries(Y[i]);
    }
}

Problem jest w tym miejscu:

         if(X[i]){
            delete (X[i]);
            X[i] = nullptr;
        }

        if(Y[i]){
            delete (Y[i]);
            Y[i] = nullptr;
        }

jednak nie za bardzo rozumiem dlaczego, jak na moje wszystko powinno ładnie zadziałać, ktoś ma jakiś pomysł ?

Z góry dziękuję za pomoc i Wesołych Świąt !

0

Rozwiązanie tego problemu jest w dokumentacji: http://doc.qt.io/qt-5/qchart.html#removeAllSeries

Próba wywołania delete na już usuniętym obiekcie to UB.

0

Czyli to:

 chart2->removeAllSeries();

"Removes and deletes all series objects that have been added to the chart."

Załatwia sprawę : )

Dziękuję bym się nie skapnął : D

1

Swoją drogą co ty wyprawiasz? Jeden punkt jeden seria?
Nie zaświeciło ci się w głowie, że coś jest chyba nie tak! Ten kod wygląda jakbyś miał mieć dwie serie, a nie 7 (lub 201).

1 użytkowników online, w tym zalogowanych: 0, gości: 1