double h = 0.5;
double n = 1/h; // <<< здесь n == 2
/* ... */
tmp=(double *)malloc(n*sizeof(double)); // <<< выделяем память для массива из двух элементов.
// Кстати, malloc() принимает аргумент size_t, а не double. Я бы не стал полагаться на неявное преобразование типов.
for(i=0;i<=n;i++) // <<< цикл от 0 до 2, т.е. для трёх элементов.
Динамические массивы
подскажите что-нибудь...
вот код:
DP()
{
double res[1000],h=0.5,*tmp,*tmp1;
double n=1/h;
int i,j=0;
do
{
m:
RK(res,n,h);
tmp=(double *)malloc(n*sizeof(double)); //здесь все нормально
for(i=0;i<=n;i++){tmp=res;printf("y'[%d] = %f\n",i,tmp);}
h=h/2;
printf("h = %f\n",h);
n=1/h;
RK(res,n,h);
tmp1=(double *)malloc(n*sizeof(double)); // а здесь ругается
for(i=0;i<=n;i++){tmp1=res;printf("y'[%d] = %f\n",i,tmp1);}
.....
}while(j<=n);
}
Что происходит в RK?
Есть malloc() -- но нет free(). Кстати, IMHO, лучше new[] и delete[] (а ещё лучше -- std::vector <double> )
AFAIR, если у нас double, то надо не printf("%f", tmp1); /* это float */, а printf("%lf", tmp1);
Массив res[] не инициализирован, там будет мусор (или он заполняется в RK() ? из кода понять невозможно). Кстати, после malloc() в tmp и tmp1 тоже будет мусор.
Далее
Код: