Форум программистов, компьютерный форум CyberForum.ru

Удаление динамического массива - C++

Восстановить пароль Регистрация
 
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
22.02.2011, 08:53     Удаление динамического массива #1
Добрый день, уважаемые форумчане!
Столкнулся со следующей проблемой, реализовал алгоритм перебора перестановок или размещений с повторениями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unsigned int k = 2, i, s = 2; //s - количество элементов по которому производится выборка
                 // k - количество элементов, которые выбирают
    int *A = new int[k]; 
 
    for (int j=0; j<k; j++) 
    {
        A[j] = 0;
    }
 
    s=2;
    do 
    {
    i = k;
    
    for (int j=0; j<k; j++) {cout << A[j] << " " ;} cout << endl;
 
    while (A[i-1]==s-1) {A[i-1]=0; i--;}
    
    A[i-1]++;
    }
    while(i!=0);
    delete []A;
без последней строчки, т.е. без delete []A; все работает замечательно, но когда я собираюсь очистить память с помощью оператора delete, то вылетает ошибка и я никак не могу взять в толк - что я делаю здесь не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
22.02.2011, 08:57  [ТС]     Удаление динамического массива #2
ошибка вылетает вот такая:
Миниатюры
Удаление динамического массива  
-=ЮрА=-
Заблокирован
Автор FAQ
22.02.2011, 12:37     Удаление динамического массива #3
В режиме отладки это обычное дело, у меня подобное с free() было, просто вбей
C++
1
2
3
#ifndef _DEBUG
delete [] A;
#endif
В дебаге чистки не будет а в релиз-версии всё будет ок!
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
22.02.2011, 12:45  [ТС]     Удаление динамического массива #4
Юрий, а в самом коде delete [] A удалить?
-=ЮрА=-
Заблокирован
Автор FAQ
22.02.2011, 12:57     Удаление динамического массива #5
Ну тогда не будет очистки памяти, хотя для массива из пары десятков элементов объём выделяемой памяти настолько ничтожен что на работе ОС это просто не отразиться...
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
22.02.2011, 13:12  [ТС]     Удаление динамического массива #6
К сожалению этот метод не подошел, по прежнему вылетает эта же ошибка...
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
22.02.2011, 13:33     Удаление динамического массива #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В режиме отладки это обычное дело, у меня подобное с free() было, просто вбей
C++
1
2
3
#ifndef _DEBUG
delete [] A;
#endif
В дебаге чистки не будет а в релиз-версии всё будет ок!
Глупости-то зачем советовать?

Molotoff, ты уверен, что после
C++
1
2
3
4
5
while (A[i - 1] == s - 1)
{
    A[i - 1] = 0;
    i--;
}
в строке
C++
1
A[i-1]++;
ты не выходишь за пределы массива?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2011, 14:20     Удаление динамического массива
Еще ссылки по теме:

C++ Удаление динамического массива
Удаление динамического массива C++
C++ Удаление динамического массива

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
22.02.2011, 14:20  [ТС]     Удаление динамического массива #8
Цитата Сообщение от rangerx Посмотреть сообщение
в строке
C++
1
A[i-1]++;
ты не выходишь за пределы массива?
все так, проблема крылась строго в индексах, т.е. нужно было просто проверять, не выходим ли за пределы:
C++
1
if (i>0) {A[i-1]++;}
всем спасибо за проявленное участие!
Yandex
Объявления
22.02.2011, 14:20     Удаление динамического массива
Ответ Создать тему
Опции темы

Текущее время: 14:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru