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

Wywołanie delete na tablicy wskaźników wysypuje program
  • Rejestracja: dni
  • Ostatnio: dni
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:

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

w konstruktorze:

Kopiuj
          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:

Kopiuj
 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:

Kopiuj
         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 !

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

Czyli to:

Kopiuj
 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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.