none
Исключение в событии timer_Tick-Ссылка на объект не указывает на экземпляр объекта - C++/CLI WinForms RRS feed

  • Вопрос

  • Глобальная переменная и метод.

    double** wht;void created(int Nt, int Nx)
    
    {              
    wht =newdouble*[Nt];for(int i =0; i < Nt; i++)
    wht[i]=newdouble[Nx];
    }

                                                                              

    Возник вопрос с исключением,который указан в следующем коде.

    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e){int Nt = Convert::ToInt32(textBox6->Text);              
            chart1->Series["Series2"]->Points->AddXY(ik, wht[jk][ik]);//---Исключение
            ik++;if(ik == Nt){
                ik =1;
                jk++;if(jk == Nt)
                    timer1->Stop();}}


    Тип исключения:
    Необработанное исключение типа "System.NullReferenceException" в TransEqu.exe
    Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
    Моя последовательность вызовов такова


      //Вызов функций

    //Последовательность вызовов	
    created(Nt,Nx);	
    drawfunc(T, xmin, xmax);	
    calculatedifnet(wht, xmin, hx, ht, a, Nt, Nx, T);	
    writeinto(wht, Nx, Nt);	
    drawdifnet(wht, Nt);
    timer1->Start();

    Во многих методах,глобальный массив wht используется как параметр.

    И в программе есть метод writeinto(wht, Nx, Nt),который записывает результаты вычисления массива wht[j][i] в текстовый файл.

    Следовательно, если есть сохранённые результаты в файлы(Я проверял по времени),значит программа работает с этим массивом. Это значит что проблемный участок кода находится в timer_Tick.

    Было попробовать старый вариант,а именно цикл for(да вы можете сказать то,что цикл for лишний но перебирались все варианты,которые приходили в голову)

    for (ik = 0; ik<= Nt - 1; ik++)
            {
                for (jk = 0; jk<= Nt - 1; jk++)
                {
                    chart1->Series["Series2"]->Points->AddXY(ik, wht[jk][ik]);
                }
            }

    Но результат такой же..


Ответы

  • Почему бы не остаться в прежней теме, а не создавать новую?

    По существу. В приведенных Вами фрагментах много "недосказанного", поэтому понять что-либо невозможно. В частности, код метода timer1_Tick манипулирует переменной ik, объявление которой в методе отсутствует. Следовательно, совершенно не понятно каково ее начальное значение.

    Согласен также с VadimTagil по поводу остальных объектов в строке:

    chart1->Series["Series2"]->Points->AddXY(ik, wht[jk][ik]);

    Проверьте их значения в отладчике, нет ничего проще!


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

Все ответы

  • "Следовательно, если есть сохранённые результаты в файлы"

    Не надо дедуктивным методом определять, в каком месте программы ошибка. Вы не в 1975 году, пользуйтесь отладчиком. Выясните, какая именно переменная равна NULL.

  • Отладчик тоже использовал
    Массив в строке кода,где исключение, представлен как <неопределённое значение>

  • Если бы неуправляемый указатель был NULL, прога бы крашилась с AccessVoilation, а не NullReferenceException, я полагаю. Может все таки что-то из управляемых объектов равно NULL? Chart, series, или points?
  • Почему бы не остаться в прежней теме, а не создавать новую?

    По существу. В приведенных Вами фрагментах много "недосказанного", поэтому понять что-либо невозможно. В частности, код метода timer1_Tick манипулирует переменной ik, объявление которой в методе отсутствует. Следовательно, совершенно не понятно каково ее начальное значение.

    Согласен также с VadimTagil по поводу остальных объектов в строке:

    chart1->Series["Series2"]->Points->AddXY(ik, wht[jk][ik]);

    Проверьте их значения в отладчике, нет ничего проще!


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!