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

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

Войти
Регистрация
Восстановить пароль
 
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

Не работает unsigned int - C++

07.10.2012, 13:08. Просмотров 574. Ответов 7
Метки нет (Все метки)

int a[536870912] - пашет
unsigned int a[536870912) - нет.

почему ? ведь судя по таблице msdn http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 (0xffffffff)
4294967295 / 4 = 1073741823 . почему же тогда компилятор ругается ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
07.10.2012, 13:49     Не работает unsigned int #2
Во-первых, у Вас закрывающаяся круглая скобка вместо квадратной. Во-вторых, размерность массива никак не связана с максимальным значением типа.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 13:50  [ТС]     Не работает unsigned int #3
как же вы тогда объясните то что
int a[536870911] - пашет
int a[536870912] - нет
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.10.2012, 13:54     Не работает unsigned int #4
Как по-твоему связано максимальное возможное значение для типа и число элементов в автоматическом массиве?
Нет, лучше так: что происходит в этой строке
C++
1
int a[536870911]
?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1240 / 989 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 13:56     Не работает unsigned int #5
В Windows процессу выделяется 2 гигабайта виртуальной памяти (в пользовательском режиме, ещё 2 гига для ядра). Вы пытаетесь создать массив, который превышает этот предел: 536870912 * 4 + 4 > 231. (Ещё 4 байта на указатель на этот массив.)
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 14:38  [ТС]     Не работает unsigned int #6
но ведь 536870912 *4 = 2147483648
а работает то 536870911
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1240 / 989 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 14:55     Не работает unsigned int #7
Ещё раз.

Массив из 536870911 интов = 536870911*4 + 4 байта = 2147483648 байтов.
Массив из 536870912 интов = 536870912*4 + 4 байта = 2147483652 байта.
Выделяемые Windows 2 гигабайта памяти = 231 байтов = 2147483648 байтов.

Процесс не может отхапать себе больше, чем 2147483648 байтов памяти.

Те лишние четыре байта вылазят, потому что надо хранить то ли размер этого массива, то ли его положение, то ли точку возврата в стеке, то ли ещё что. Скорее всего именно точку возврата. Я не особо в курсе, но судя по поведению, они заняты.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 15:48     Не работает unsigned int
Еще ссылки по теме:

Vector<unsigned char> в int C++
C++ Создать массив объединений, содержащих поля unsigned int и float
C++ Сложение int и unsigned
C++ Отличаются ли unsigned int и BYTE ?
C++ Почему плохо использовать unsigned int?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,758
Записей в блоге: 26
07.10.2012, 15:48     Не работает unsigned int #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ещё 4 байта на указатель на этот массив
Нету никакого указателя
Yandex
Объявления
07.10.2012, 15:48     Не работает unsigned int
Ответ Создать тему
Опции темы

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