Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

почему ? ведь судя по таблице msdn http://msdn.microsoft.com/en-us/library/296az74e(v=vs.80).aspx
UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 (0xffffffff)
4294967295 / 4 = 1073741823 . почему же тогда компилятор ругается ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает unsigned int (C++):

Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? - C++
Ребят, срочно прошу вас помочь.. Есть ошибка (невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int ") как ее...

Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int. - C++
Пользователь вводит двоичную строку (32 символа). Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int.

Определение типов. Приведение int к unsigned int - C++
При таком определении 5 рассматривается как int. Как при определении указать что 5 будет именно unsigned int? unsigned int n=5; ...

Разница int, short, unsigned int, unsigned short - C++
Есть например цикл который проходит по массиву в котором 100 элементов. В чем практическая выгода и разница в истоьзовании типов short,...

Сложение int и unsigned - C++
Всем привет. Есть код в котором складывается int и unsigned. unsigned u=10; int i=-42; cout<<u+i<<endl; Вопрос: ответ будет...

Отличаются ли unsigned int и BYTE ? - C++
Взял из unrar метод приведения sha1 к 128 битному паролю AES. void AesKeyExpansion(BYTE Key, int KeyLenght, unsigned int digest) { ...

7
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
07.10.2012, 13:49 #2
Во-первых, у Вас закрывающаяся круглая скобка вместо квадратной. Во-вторых, размерность массива никак не связана с максимальным значением типа.
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 13:50  [ТС] #3
как же вы тогда объясните то что
int a[536870911] - пашет
int a[536870912] - нет
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.10.2012, 13:54 #4
Как по-твоему связано максимальное возможное значение для типа и число элементов в автоматическом массиве?
Нет, лучше так: что происходит в этой строке
C++
1
int a[536870911]
?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 13:56 #5
В Windows процессу выделяется 2 гигабайта виртуальной памяти (в пользовательском режиме, ещё 2 гига для ядра). Вы пытаетесь создать массив, который превышает этот предел: 536870912 * 4 + 4 > 231. (Ещё 4 байта на указатель на этот массив.)
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 14:38  [ТС] #6
но ведь 536870912 *4 = 2147483648
а работает то 536870911
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 14:55 #7
Ещё раз.

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

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

Те лишние четыре байта вылазят, потому что надо хранить то ли размер этого массива, то ли его положение, то ли точку возврата в стеке, то ли ещё что. Скорее всего именно точку возврата. Я не особо в курсе, но судя по поведению, они заняты.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,822
Записей в блоге: 28
07.10.2012, 15:48 #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ещё 4 байта на указатель на этот массив
Нету никакого указателя
0
07.10.2012, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 15:48
Привет! Вот еще темы с ответами:

numeric_limits<unsigned int>::digits - C++
при запуске такой скомпилиной проги на 32р. системе должно вывести bits in int: 32 а при запуске на 64р. системе bits in int: 64 так...

Vector<unsigned char> в int - C++
есть vector&lt;unsigned char&gt; размером 4 байта..и мне надо перевести их в 1 число типа int. т.е. типо int command = tempN.data(); но ...

Преобразование 'time_t' в 'unsigned int' - C++
Массив предназначен для хранения значений ростов двенадцати человек. С помощью датчика случайных чисел заполнить массив целыми значениями,...

Почему плохо использовать unsigned int? - C++
Почему плохо использовать unsigned int и чему он удобней для представления массивов бит чеm signed int? (Из Страуструпа)


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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