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

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

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

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

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

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

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

Но дебагер до if-а не доходит, я так понимаю что-то перехватывает исключение...
Неужели "ручками" уже не обработаешь, только через исключения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 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
Супер-модератор
Эксперт С++
5580 / 2614 / 239
Регистрация: 01.11.2011
Сообщений: 6,427
Завершенные тесты: 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
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.12.2013, 14:39     Обработка ситуации с нехваткой динамической памяти #8
Цитата Сообщение от loou Посмотреть сообщение
Эммм... Ну не весь же его выкладывать...
Создайте минимальный пример при котором проявляется ситуация и выкладывайте.
Иначе гадать можно долго.
alsav22
5413 / 4809 / 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
Супер-модератор
Эксперт С++
5580 / 2614 / 239
Регистрация: 01.11.2011
Сообщений: 6,427
Завершенные тесты: 1
18.12.2013, 16:51     Обработка ситуации с нехваткой динамической памяти #11
Цитата Сообщение от alsav22 Посмотреть сообщение
В судии, в debug, виснет на выделении. В mingv и в debug нормально работает.
Борландовый компилятор прекрасно кушает. Просто для сведения.
Yandex
Объявления
18.12.2013, 16:51     Обработка ситуации с нехваткой динамической памяти
Ответ Создать тему
Опции темы

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