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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
#1

Обработка ситуации с нехваткой динамической памяти - C++

17.12.2013, 02:22. Просмотров 425. Ответов 10
Метки нет (Все метки)

Хочу обработать ситуацию с нехваткой памяти.
Пишу стандартно:

A=new double[N];
if(!A) {...;}

Но дебагер до if-а не доходит, я так понимаю что-то перехватывает исключение...
Неужели "ручками" уже не обработаешь, только через исключения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 02:43     Обработка ситуации с нехваткой динамической памяти #2
C++
1
A = new(nothrow) double[N];
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
17.12.2013, 14:00  [ТС]     Обработка ситуации с нехваткой динамической памяти #3
Что-то не помогло:

подключаю
C++
1
2
3
4
#include <new>
...
A=new(std::nothrow) double[N]
if (!A) {...}
До if всеравно не доходит... В чем может быть проблемма?
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
17.12.2013, 14:12     Обработка ситуации с нехваткой динамической памяти #4
loou, а N объявлена? И точка с запятой стоит в третьей строке?
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
17.12.2013, 14:15  [ТС]     Обработка ситуации с нехваткой динамической памяти #5
Да конечно, извиняюсь за невнимательность.
Все компилируется и дебаг запускается и даже exe, вот только до if не доходит если N очень большое, появляется системное сообщение что память выделить не удалось, программа закрывается...
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.12.2013, 14:25     Обработка ситуации с нехваткой динамической памяти #6
Цитата Сообщение от loou Посмотреть сообщение
вот только до if не доходит если N очень большое
код в студию.
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
17.12.2013, 14:34  [ТС]     Обработка ситуации с нехваткой динамической памяти #7
Эммм... Ну не весь же его выкладывать...

new(nothrow) использую в методе класса,
if следует прямо за ним,
<new> подключаю в файле где описан метод.

Хочу еще попытаться <new> подключить в файле с основной функцией _tWinMain

Может ли влиять то что это Windows программа?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.12.2013, 14:39     Обработка ситуации с нехваткой динамической памяти #8
Цитата Сообщение от loou Посмотреть сообщение
Эммм... Ну не весь же его выкладывать...
Создайте минимальный пример при котором проявляется ситуация и выкладывайте.
Иначе гадать можно долго.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 16:36     Обработка ситуации с нехваткой динамической памяти #9
В release такая конструкция нормально работает, в debug - не нормально (конфигурация Win32):
C++
1
2
3
4
5
6
7
double* A;
unsigned long int N = 1000000000;
A = new(nothrow) double[N];
if (!A) 
{
    cout << "Error!" << endl;
}
В судии, в debug, виснет на выделении. В mingv и в debug нормально работает.
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
18.12.2013, 15:36  [ТС]     Обработка ситуации с нехваткой динамической памяти #10
Действительно в Release все работает как нада.

А как же дебажить???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 16:51     Обработка ситуации с нехваткой динамической памяти
Еще ссылки по теме:
C++ Массив в динамической памяти
C++ Вопрос по динамической памяти
C++ Распределение динамической памяти!
Вопросы по динамической памяти. C++
Выделение динамической памяти C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
18.12.2013, 16:51     Обработка ситуации с нехваткой динамической памяти #11
Цитата Сообщение от alsav22 Посмотреть сообщение
В судии, в debug, виснет на выделении. В mingv и в debug нормально работает.
Борландовый компилятор прекрасно кушает. Просто для сведения.
Yandex
Объявления
18.12.2013, 16:51     Обработка ситуации с нехваткой динамической памяти
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru