Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамические массивы

32K
29 июня 2009 года
paska
26 / / 06.02.2009
пишу программку в которой использую динамические массивы под первый массив память выделяется нормально... а при выделении памяти под второй массив выдается ошибка Access Violation...
подскажите что-нибудь...
вот код:

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);
}
294
29 июня 2009 года
Plisteron
982 / / 29.08.2003
Ты бы хоть код в порядок привёл...
Что происходит в RK?
Есть malloc() -- но нет free(). Кстати, IMHO, лучше new[] и delete[] (а ещё лучше -- std::vector <double> )
AFAIR, если у нас double, то надо не printf("%f", tmp1); /* это float */, а printf("%lf", tmp1);
Массив res[] не инициализирован, там будет мусор (или он заполняется в RK() ? из кода понять невозможно). Кстати, после malloc() в tmp и tmp1 тоже будет мусор.
Далее
 
Код:
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, т.е. для трёх элементов.
На этом хватит пока...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог