|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||
Проверка выделения памяти указателей через оператор new17.01.2015, 10:42. Показов 23502. Ответов 77
Метки нет (Все метки)
И так есть некая структура, экземпляр которой определён как:
Предполагаю что:
П.С. В дальнейшем естественно кол-во массивов и матриц будет больше 1, потому у меня сейчас сомнения того как правильно написать цикл проверки.
0
|
||||||||||||||||
| 17.01.2015, 10:42 | |
|
Ответы с готовыми решениями:
77
Вопрос по поводу динамического выделения памяти и указателей
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||
| 17.01.2015, 18:10 [ТС] | |||||
![]() Имелось в виду что если уж new не сработает, то v = NULL будет, а значит правильный выход по return -1 (как у меня)... В общем какой итог то данной темы? (или я тороплюсь и надо ещё дождаться нескольких ответов?) 1. Хотелось бы получить избежать использования try/catch/throw (и даже std::nothrow тоже, т.к. усложняет код!) 2. Может мне вообще тогда уж уйти в стандарт Си с использованием alloc? (я правда ещё не знаю с чем его едят, т.к. даже не пробовал) 3. Так как будет вообще правильно сделать? ![]() 4. Стоит ли написать собственную проверку на кол-во свободной памяти в соответствии с нужной перед использованием оп. New? *Имею ввиду что возьму winapi функцию, посмотрю сколько там есть, сравню с тем сколько надо, и только если соответствие - то вызову new.. Добавлено через 3 минуты
0
|
|||||
|
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
|
|
| 17.01.2015, 18:11 | |
|
хочу писать по-русски, но не использовать русских букв и, желательно, знаков препинания...
Меняйте язык...
0
|
|
|
Неэпический
|
||||||
| 17.01.2015, 18:11 | ||||||
|
0
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||
| 17.01.2015, 18:32 [ТС] | |||||||||
|
Самый распространённый пример в интернете:
Просто это не логично, вот и всё. Добавлено через 7 минут ![]() В общем то тему можно закрывать, сделаю я так как в 9 посте сказали. Чую что кроме кошака мне тут больше ничего полезного ни кто не скажет. А дальнейшие разговоры ни к чему хорошему не приведут. :lock:
0
|
|||||||||
|
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
|
|
| 17.01.2015, 18:36 | |
|
Ну если конструкция языка сама по себе бросает исключение, то как логично сделать?
Но Вы ж хотите не так, как предусмотренно самим языком. Что здесь логичного?
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 17.01.2015, 18:44 [ТС] | ||
|
Как я в общем и предполагал до этого, проверка на соответствие допустимой памяти решит вопрос с bad_alloc, т.к. это единственное разумное объяснение того, почему throw может возникнуть при вызове оператора new. Хотя вопрос с 40'000 байт до сих пор мерцает как совершенно не логичный, т.к. не поставлено условие что допустимой памяти меньше 40000. Видимо значит надо покапаться в том почему этого условия нет, ушёл читать про alloc... может там что то есть.
0
|
||
|
Неэпический
|
||
| 17.01.2015, 18:56 | ||
|
1) Проверил память - хватает. 2) В это время другой процесс забирает себе всю доступную память. 3) Вы вызваете new, хватит ли памяти теперь? Может система решит этот вопрос, а может и нет.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 17.01.2015, 19:44 [ТС] | |
|
Croessmah, во правильно мыслиш (ты прям как бальзам на душу, жаль только одно->), я этот момент уже написал в посте N15. Но не получил ответ на вопрос о том, чтоб как раз возможно было заблокировать другие процессы, т.е. чтоб между этими двумя моментами не было "прерывания" другого процесса.
![]()
0
|
|
|
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
|
|
| 17.01.2015, 19:46 | |
|
В защищенном режиме процессора для каждого процесса выделяется своя область памяти. Другие процессы память не заберут.
Если же пишете под старый ДОС, используйте запрет прерываний командой ассемблера.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 17.01.2015, 19:55 [ТС] | |||
|
Добавлено через 6 минут Вот чё нашёл:
0
|
|||
|
Неэпический
|
||||
| 17.01.2015, 19:56 | ||||
|
Выбирайте средства и делайте. Не нравится стандартное - напишите своё, в чем проблема то?
0
|
||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 17.01.2015, 20:03 [ТС] | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||
| 17.01.2015, 21:53 | |||||||||||||||||
Вы не могли бы уточнить: 1. Насколько я понял, есть operator new и есть операция new. http://habrahabr.ru/post/185662/ Тогда:
std::nothrow - это имя объекта такое, смысли тут какая то перегрузка срабатывает? 2. Самое главное: std::nothrow означает, что сама операция/оператор new не кидает своих исключений. Но если я правильно понял, то это никак не распространяется на конструкторы аллоцируемых объектов. Что произойдет, если:
Просто, если std::terminate, как в случае с noexcept, то это одно. А если оно благополучно полетит назад по стеку - это другое. Но в обоих случаях получается, что единственный безопасный с точки зрения исключений способ работать с new - это ставить ловушки try/catch
0
|
|||||||||||||||||
|
Неэпический
|
||||
| 17.01.2015, 22:02 | ||||
|
Операторы new/delete - Это вот эти функции: http://www.cplusplus.com/reference/new/
1
|
||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||
| 17.01.2015, 22:21 | |||
|
1
|
|||
|
Неэпический
|
|
| 17.01.2015, 22:38 | |
|
1
|
|
| 17.01.2015, 22:38 | |
|
Проверка выделения памяти Проверка выделения памяти Проверка возраста через оператор switch Выделение памяти для массива через оператор new Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|