Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 02:20   #1
viktr
Новичок
Джуниор
 
Регистрация: 09.06.2011
Сообщений: 1
По умолчанию Нестыковка TChart и динамического массива

Доброго времени суток! Программа должна выводить график. Когда делаю массив статическим, все работает замечательно, но есть огромное желание вводить количество элементов массива. Поэтому массив сделал динамическим. При выполнении программы выскакивает ошибка - raised exception class EAccess Violation "Access violation at addres 011941DE in module "BORLNMM.DLL" write of address 000000004 процесс остановлен и т.д. Когда нажимаю ОК на листинге стрелка указывает на строку Series1->AddXY(t*tau,Q,clBlue); причем t уже равно 2, тоесть первый раз цикл уже пробежал. Когда коментарю работу с массивом, все опять работает. Код:
Код:
#include <vcl.h>
 #include <math.h>
// #include <sysdyn.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TForm1 *Form1;
 float h=0.1;           // шаг
 float tau=0.0001;      // шаг по времени
 float dQ;              // конечная ошибка
 float ro;              // плотность
 float nu;              // вязкость
 float p;               // давление
 int x = 400;               // длинна канала
 int y = 10;               // толщина канала
 int z;               // ширина канала
 int i,j;               // размерность массива
 float stepP,newP;
 //float U[400][10];      // массив скорости
 //float newU[400][10];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Series1->Clear();
   int t = 0;
   float Q=0, oldQ=0;

 if(Edit1->Text == "")
{
	ShowMessage("Вы не ввели плотность");
	return ;
}
if(Edit2->Text == "")
{
	ShowMessage("Вы не ввели вязкость");
	return ;
}
if(Edit3->Text == "")
{
	ShowMessage("Вы не ввели давление");
	return ;
}
if(Edit4->Text == "")
{
	ShowMessage("Вы не ввели длинну канала");
	return ;
}
if(Edit5->Text == "")
{
	ShowMessage("Вы не ввели толщину канала");
	return ;
}
if(Edit6->Text == "")
{
	ShowMessage("Вы не ввели ширину канала");
	return ;
}
ro = StrToFloat(Edit1->Text);
nu = StrToFloat(Edit2->Text);
p = StrToFloat(Edit3->Text);
x = StrToInt(Edit4->Text);
y = StrToInt(Edit5->Text);
z = StrToInt(Edit6->Text);
stepP = p/x;
newP = p;
ro = ro/1000;

 float **U;      // массив скорости
 float **newU;   // временный массив скорости

  U=new float*[x];            //Выделение памяти под массив указателей из X элементов
	for(i=0;i<=x;i++) U[i]=new float[y];

 newU=new float*[x];            //Выделение памяти под массив указателей из X элементов
	for(i=0;i<=x;i++) newU[i]=new float[y];

       for(i=0; i <= x; i++)
      {
       for(j = 0; j <= y; j++)
           {
           U[i][j]=0;
           newU[i][j]=0;
           };
       };
  do
  {
   for(i = 0; i <= x; i++)
      {
       for(j = 0; j <= y; j++)
           {
           U[i][y]=0;
           U[i][0]=0;
  newU[i][j] = U[i][j] + (tau/ro)*(newP+nu*(U[i][j+1]+U[i][j-1]-2*U[i][j])/h/h);
           };
           newP=newP-stepP;
       };
   for(i = 0; i <= x; i++)
      {
       for(j = 1; j <= y-1; j++)
           {
           U[i][j]=newU[i][j];
           };
       };
   for(j = 0; j <=y; j++)
           {
           Q = Q+U[x][j];
           };
      t++;
    Series1->AddXY(t*tau,Q,clBlue);

    dQ = Q - oldQ;
    oldQ = Q;
    Q=0;
    newP = p;
    if (t<220) dQ = 1;
  }
  while ( 0.0000001 < dQ);
  for (i = 0; i <= x; i++) delete[]U[i];
  delete[]U;
  for (i = 0; i <= x; i++) delete[]newU[i];
  delete[]newU;

}
Подскажите где нестыковка?

Последний раз редактировалось viktr; 09.06.2011 в 11:40.
viktr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объявление динамического массива katena88 Общие вопросы C/C++ 45 19.06.2012 21:53
Передача динамического массива krosh87 Работа с сетью в Delphi 3 24.02.2011 18:39
Очистка динамического массива JohnnySuperb Общие вопросы Delphi 11 10.12.2010 07:47
очистка динамического массива BattleMage Общие вопросы C/C++ 1 19.09.2009 09:03
Освобождение динамического массива? VintProg Общие вопросы Delphi 15 28.08.2009 10:41