1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||||||||||||
1 | ||||||||||||||||
Невыводимое сообщение про badalloc07.03.2015, 19:15. Показов 1660. Ответов 32
Метки нет (Все метки)
Вылетает с сообщеним std::badalloc.
Не вылетает с сообщеним std::badalloc. и завершается успешно
__________________________________________ Но при этом вылетает если пробовать обойти весь массив.
Всего 8ГБ, 4,40ГБ свободно, Win7x64, gnu gcc
0
|
07.03.2015, 19:15 | |
Ответы с готовыми решениями:
32
И снова про PopupMenu (было про длину, теперь про ширину) В FireFox при открытии любого сайта всплывает сообщение про недействительный сертификат Создать файл с информацией о студентах, вывести сообщение про студентов по возрастанию их балла за сессию Про ШИМ в роли ЦАП и про АЦП на примере резистивного датчика |
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
07.03.2015, 20:50 [ТС] | 21 |
0
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
07.03.2015, 20:52 | 22 |
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
07.03.2015, 20:58 [ТС] | 23 |
Чего-то здесь не сходится с суждениями.
Ну или я черезчур тупой.(не исключаю)
0
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
07.03.2015, 20:59 | 24 |
1
|
daslex
|
07.03.2015, 21:12
[ТС]
#25
|
Не по теме: Я про size_t понял так, что этот size_t имеет отношение к моему посту с цитатой из Прата. Т.е. ситуация такая, когда константа-таки не довыделяется на столько насколько требуется. Поэтому там мне посоветовали указать соответствующий размер.
0
|
Модератор
13706 / 10909 / 6473
Регистрация: 18.12.2011
Сообщений: 29,125
|
||||||
07.03.2015, 21:22 | 26 | |||||
А ведь действительно
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
07.03.2015, 21:39 [ТС] | 27 | ||||||||||
Убежденный, Хорошо, что Вы меня направляете на путь истинный, благодаря Вам я сейчас что-то еще узнал (причем действительно полезное). Но, Вам не кажется, что мой вопрос имеет отношение немного к другому?
1200000000000 не влазит в size_t твоего компилятора. В результате переполнения получается 1704124416. а 1000000000000 влазит что ли?)) _____________________ У меня не вопрос: "Почему ошибка". У меня вопрос: "Почему в аналогичной ситуации две различные реакции программы". В одном случае вылет с сообщением о BadAlloc, во втором случае просто вылет _________ (с тем к чему пришли про size_t) В одном случае вылет с badalloc Во втором случае все окей Ведь судя из возвращаемого значения new должно получаться size_t и в первом и во втором случаях. Может это кто-то пояснить? вылет с badalloc
0
|
Ушел с форума
|
||||||
07.03.2015, 22:02 | 28 | |||||
Сообщение было отмечено daslex как решение
Решение
Попробуем разобраться.
Выражение "type * p = new type[count]" на двоичном уровне так или иначе приходит к вызову функции выделения памяти размером как минимум "sizeof (type) * count" байт. В обоих приведенных случаях значение count, как мы уже выяснили, не влезает в тип size_t и поэтому "выдает себя за другого". В итоге 1000000000000 превращается в 3567587328, а 1200000000000 превращается в 1704124416. Дальше происходит еще одно переполнение. А именно: размер uint64_t - 8 байт, поэтому конструкция "uint64_t * p = new uint64_t[3567587328]" приводит к попытке выделения 3567587328 * 8 = 2770894848 байт (да-да, такая вот арифметика). Не знаю, как в других операционках, но в 32-битных процессах Windows выделить порядка двух гигов непрерывной памяти практически невозможно. Отсюда и std::bad_alloc в первом примере. Во втором примере немного по-другому: 1704124416 * 8 = 748093440, меньше одного гигабайта. Да, много, но система выделить может. Поэтому здесь std::bad_alloc нет. Пример для иллюстрации написанного выше (Visual C++ 2008 SP1, Win32):
2
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
07.03.2015, 22:04 [ТС] | 29 |
Вот это я и хотел узнать. Спасибо.
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
07.03.2015, 23:22 [ТС] | 31 | |||||
Ну в смысле, что то где я видел написано, что указатель в случае неудачного выделения памяти возвращает NULL (null_ptr)
Сразу же я привожу пример где я пытаюсь это изобразить, но у меня на это ноль реакции. Не получилось - значит не хватает знаний. Не хватает знаний - значит не умею.
из Прата
0
|
daslex
|
07.03.2015, 23:46
[ТС]
Невыводимое сообщение про badalloc
#33
|
Не по теме: Тема другая нужна. Это ведь другой вопрос. Если я сам не разберусь, спрошу :) Мне пока что это не нужно.
0
|
07.03.2015, 23:46 | |
07.03.2015, 23:46 | |
Помогаю со студенческими работами здесь
33
Версии Делфи 10 и 7. Можно где-то почитать про их особенности, про совместимость? Как заблокировать windwos (нет, я не про вирус, а про win+l) моя первая плата, хедеры - вопрос про eagle или про пайку разное про работу инвертора, трансформатора + про esr Вопрос про обратную связь, и про схемотехнику полумоста Про прицелы. Или про линзу сложной формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |