Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.08.2009, 22:47
microed вне форума Посмотреть профиль Отправить личное сообщение для microed Найти все сообщения от microed
  № 1  
Ответить с цитированием
microed

Регистрация: Aug 2009
Сообщений: 18
По умолчанию crash ошибка при больших индексах массива

Согласно документации, максимальное число элементов в одномерном массиве: 2^32=4294967296. Мне нужен весь диапазон индексов. Пробуем:

Код AS3:
var arr:Array=new Array();
arr[0]=false;
// ...  и др.
arr[2147483647]=true;
arr[2147483648]=true;  // с этого индекса начинаются проблемы
arr[3273124597]=true;
arr[4294967295]=true;
Cобственно проблемы:
arr.splice(0); // вызывает неуправляемую утечку памяти с crash ошибкой плейера:

Add-ons: {972ce4c6-7e08-4474-a285-3208198ce6fd}:3.0.13
BuildID: 2009073022
CrashTime: 1251135034
InstallTime: 1249678458
ProductName: Firefox
SecondsSinceLastCrash: 1950
StartupTime: 1251134999
Theme: classic/1.0
Vendor: Mozilla
Version: 3.0.13
---------------------------------------

Подозрительный момент: во Flex'овом отладчике по watch видно, что все элементы, начиная с индекса 2147483648 он [отладчик] в 'Expressions' окне отрисовывает уже без квадратных скобок, т.е. выглядит это так:

[2147483647]=true;
2147483648=true;
3273124597=true;
4294967295=true;

Однако обращения к элементам с этими индексами проходят удачно и значения считываются.

Использую SDK 3.3.0.
Объем памяти: 2Гб.

Это баг или я что-то не так понимаю?

Старый 24.08.2009, 22:57
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS1/AS2:
trace(2147483648, int.MAX_VALUE);
Интересно, в какой ситуации нужен такой большой массив?
Да, и это, ссылку на документацию пожалуйста, как это свойсто length типа int будет вам возвращать такие числа?
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 24.08.2009 в 23:00.
Старый 24.08.2009, 23:15
microed вне форума Посмотреть профиль Отправить личное сообщение для microed Найти все сообщения от microed
  № 3  
Ответить с цитированием
microed

Регистрация: Aug 2009
Сообщений: 18
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Код AS1/AS2:
trace(2147483648, int.MAX_VALUE);
Да, и это, ссылку на документацию пожалуйста, как это свойсто length типа int будет вам возвращать такие числа?
Хм. Да нормально возвращают. И отладчик, и трассировщик::
Код AS3:
var tn:Number=arr.length;
trace(tn);

Старый 24.08.2009, 23:25
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Да, и это, ссылку на документацию пожалуйста, как это свойсто length типа int будет вам возвращать такие числа?
Не int, а uint.

Старый 25.08.2009, 00:07
microed вне форума Посмотреть профиль Отправить личное сообщение для microed Найти все сообщения от microed
  № 5  
Ответить с цитированием
microed

Регистрация: Aug 2009
Сообщений: 18
http://livedocs.adobe.com/flex/3/htm..._ProgAS_1.html

Старый 25.08.2009, 00:31
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
@ udaaff:
Цитата:
Сообщение от manual
Array(numElements:int = 0)
Lets you create an array of the specified number of elements.
То что у length стоит тип uint, это для проформы, на самом деле int.
@ microed:
Это ссылка на титульную страницу...
Вам на самом деле сюда надо было сначала смотреть:
http://livedocs.adobe.com/flex/3/langref/Array.html
__________________
Hell is the possibility of sanity

Старый 25.08.2009, 00:40
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
@ wvxvw
Цитата:
Сообщение от manual
Indexed arrays use an unsigned 32-bit integer for the index number. The maximum size of an indexed array is 232 - 1 or 4,294,967,295. An attempt to create an array that is larger than the maximum size results in a run-time error.
Там int, тут uint.. не понятно.

Старый 25.08.2009, 01:00
microed вне форума Посмотреть профиль Отправить личное сообщение для microed Найти все сообщения от microed
  № 8  
Ответить с цитированием
microed

Регистрация: Aug 2009
Сообщений: 18
Цитата:
Сообщение от wvxvw Посмотреть сообщение
@ udaaff:

То что у length стоит тип uint, это для проформы, на самом деле int.
@ microed:
Это ссылка на титульную страницу...
Вам на самом деле сюда надо было сначала смотреть:
http://livedocs.adobe.com/flex/3/langref/Array.html
Ну хорошо, смотрим..
"Property Detail
length:uint
A non-negative integer specifying the number of elements in the array." И далее по тексту..

"The uint data type is stored internally as a 32-bit unsigned integer and comprises the set of integers from 0 to 4,294,967,295"

Пока всё в документации указывает на index max = 4,294,967,295. Чем докажете, что это всё "для проформы"? Они где-то оговорились или покаялись?

Старый 25.08.2009, 01:35
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Хм... а вообще - интересный момент... не смотря на то, что аргумент у Array() задан как int, он вполне принимает и бОльшие значения...
Возможно зависит от версии плеера, потому что у меня ваш код не вызывает никаких исключений.
__________________
Hell is the possibility of sanity

Старый 25.08.2009, 01:43
microed вне форума Посмотреть профиль Отправить личное сообщение для microed Найти все сообщения от microed
  № 10  
Ответить с цитированием
microed

Регистрация: Aug 2009
Сообщений: 18
Для прогонки использую плагин для firefox v10.0 r12. На нем и проявилось..

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.