Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Создание двух динамических массивов
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
qqeeaaddzzcc qqeeaaddzzcc вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.07.2007
По умолчанию Создание двух динамических массивов - 21.05.2008, 01:37

Здравствуйте,
подскажите, что может быть не правильно:
создаются 2 динамических массива MassX и MassY, в конце той же функции память освобождается, но между этими событиями вызываются несколько функций, одна из которых (приведена здесь) приводит к ошибке access violation при освобождении памяти. Ну никак не могу понять, что может здесь привести к этой ошибке . Если освобождать память поэлементно, - ошибка возникает при освобождении элементов №0 и 2.
Код:
void data::GetVicinity(const int NUMt, QWE* CornVal, double* RezultX, double* RezultY, int Begin1, int Begin2)
{
 int int1;
 int Begin1t, Begin2t, Begin1tt, Begin2tt;                              //local variables
 
 if(NUMt==NumX)
 {
  Begin1= 1;
  Begin2= pow(2,NumX);
 };
             //std::cout<<Begin1<<"       "<<Begin2<<'\n';
 if(NUMt>0)
 {

        for(int i=0; i<NumY; ++i)
        {
         Begin1t= Begin1;
         Begin2t= (Begin2- Begin1+ 1)/2+ Begin1- 1;
         RezultY[(Begin1t-1)*NumY+ i]= CornVal->Y[i];

         Begin1tt= Begin2t+ 1;
         Begin2tt= Begin2;
         RezultY[(Begin2tt-1)*NumY+ i]= CornVal->pQWE_FOLLOW[NumX- NUMt]->Y[i];
        };
        
         for(int i=0; i<NumX; ++i)
        {
         RezultX[(Begin1t-1)*NumY+ i]= CornVal->X[i];

         RezultX[(Begin2tt-1)*NumY+ i]= CornVal->pQWE_FOLLOW[NumX- NUMt]->X[i];
        };
        
         GetVicinity(NUMt- 1, CornVal, RezultX, RezultY, Begin1t, Begin2t);
         GetVicinity(NUMt- 1, CornVal->pQWE_FOLLOW[NumX- NUMt], RezultX, RezultY, Begin1tt, Begin2tt);
 };

 return;
};
Ответить с цитированием
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 21.05.2008, 12:51

Скорее всего, вылетаешь за границы массивов.
Общая рекомендация: используй std::vector вместо динамических массивов.
Ответить с цитированием
  (#3 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 21.05.2008, 14:43

Возможно выход за границы связан с тем, что ты пишешь ++i, а правильно было бы i++.
Ответить с цитированием
  (#4 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 21.05.2008, 16:47

Цитата:
Возможно выход за границы связан с тем, что ты пишешь ++i, а правильно было бы i++.
Хм.. Я думаю ты ошибаешся. Никакой разницы в данном случае нет. Кроме того, в общем случае, лучше писать как раз ++i, так как, если i - не просто целый тип, а сложный пользовательский( итератор ), то расходы могут оказаться существенными, ведь за i++ приходится платить лишним временным объектом этого класса.


импортирован с progz.ru
Ответить с цитированием
  (#5 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 21.05.2008, 17:39

Цитата:
Хм.. Я думаю ты ошибаешся.
Возможно. Я думал, что если писать ++i, то значение пременной i будет увеличиваться до начала итерации. Это нет так ?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 21.05.2008, 21:32

Цитата:
Возможно. Я думал, что если писать ++i, то значение пременной i будет увеличиваться до начала итерации. Это нет так ?
Всей разницы - чему будет равно непосредственно в выражении.

Код:
 int i = 0;
 int k = i++;//k равно 0;
 int m = ++i;//m равно 2
А в for три разных выражения. Т. е. в какой форме будет записан инкремент i значения иметь не будет.
Ответить с цитированием
  (#7 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 23.05.2008, 17:27

проверил - и впрямь
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти наибольшую общую последовательность для двух числовых массивов viktorr C++ Builder 4 22.05.2010 18:10
С помощью какой стандартной компоненты можно нарисовать график из двух массивов qqeeaaddzzcc C++ Builder 5 12.01.2009 23:05
Быстрый Алгоритм сравнения двух массивов AcerExtensa С/С++ 6 21.07.2008 11:38
Объединение двух массивов Horror Алгоритмы 6 27.11.2007 18:01
Сравнение двух массивов в Excel'e edgar Visual Basic 2 20.08.2007 17:33
Конкатенация двух численных массивов Amputator Pascal 4 16.04.2006 20:01
TFileStream создание двух динамических массивов Ал-леша C++ Builder 3 01.06.2005 10:38
Вывод динамических массивов imported_Elka Вопросы начинающих программистов 2 04.04.2005 14:48
Создание функции динамических массивов в С++ ddo Вопросы начинающих программистов 3 05.10.2004 14:28
Создание массивов в С++ Builder Olegg C++ Builder 1 24.06.2004 17:36
Несовместимость указателей двух- и одномерных массивов EiTRoN С/С++ 18 03.06.2004 13:26
Проектирование динамических массивов в С++ Anonymous Вопросы начинающих программистов 1 08.09.2003 23:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов