Отговори на тема  [ 14 мнения ] 
VB6 голям масив ? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение VB6 голям масив ?
Как се декларира голям ( 1М елементи) масив във VB6?

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Нед Фев 12, 2006 5:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
И на мен ми е интересно как става работата с много големи масиви в Visual C++ na Microsoft.


Нед Фев 12, 2006 5:52 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
..ако може и някой да ми каже дали има и как се прави #define на VB6 ...

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Нед Фев 12, 2006 9:47 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Чет Дек 01, 2005 10:42 pm
Мнения: 301
Мнение 
На С (и ++ предполагам), като си правиш Windows приложение, неща от вида

Код:
int array[2000000];


си работят съвсем нормално; писал съм и под ДОС extender подобни неща; Грижата остава в операционната система, и ако няма как - гърми и не пуска програмата изобщо.


Нед Фев 12, 2006 9:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: VB6 голям масив ?
nickich написа:
Как се декларира голям ( 1М елементи) масив във VB6?


Код:

Dim arr(1024 ^ 2) As Long



Нед Фев 12, 2006 9:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Nikola Kirov написа:
И на мен ми е интересно как става работата с много големи масиви в Visual C++ na Microsoft.


Код:
long* pArray = new long[1024*1024];


после задължително не трябва да се забравя да се освободи:

Код:
delete [] pArray;


Нед Фев 12, 2006 10:01 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
Мерси Реконструктор, стана \:D/

Но защо като декларирам:
Код:
Dim intarray((1024 * 128)) As Integer
гърми с: Compile error: Overflow

а като декларирам:
Код:
Dim intarray(131072) As Integer

или както е написал Реконстуктор, си работи нормално ?

.. може да задавам тъп въпрос, но не съм работил много с VB и не се сещам :oops:

а, и трябва ли да се освобождава после масива ?

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Нед Фев 12, 2006 11:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Защото компилаторът ти изчислява 1024 * 128 и се мъчи да го напъха в integer ( max 32767 ). Напиши ((1024 * 128)ul).


Нед Фев 12, 2006 11:08 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
bateAz написа:
Защото компилаторът ти изчислява 1024 * 128 и се мъчи да го напъха в integer ( max 32767 ). Напиши ((1024 * 128)ul).


Точно така бате, но това няма да работи. :) Няма как да се направи по този начин (с формула).


Нед Фев 12, 2006 11:39 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
Добре де, като декларирам
Код:
Dim intarray(131072) As Integer

работи, въпреки, че 131072 > 32767.
Тази декларация не означава ли че искам да ми задели 131072 Integer-а ?? Защо трябва размера да се мъчи да го напъха в Integer?
Значи ако му кажа:
Код:
Dim intarray(1024 * 4) As Integer

примерно, също работи.
А
Код:
Dim intarray(1024 * 128) As Long
- неще.

Нещо ми се губи логиката ...

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пон Фев 13, 2006 10:13 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Гърми, когато предпроцесорът изчислява. Ако го вземе "сдъвкано" - няма проблем.


Пон Фев 13, 2006 12:24 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
bateAz написа:
Защото компилаторът ти изчислява 1024 * 128 и се мъчи да го напъха в integer ( max 32767 ). Напиши ((1024 * 128)ul).


аааа, сега стоплих :)
мерси! :)

..баси колко съм отвеян :)

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пон Фев 13, 2006 12:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
VB е доста тъп език с доста странности. :) Ако искаш хубав RAD, насочи се към на Борланд продуктите, java или C#.
Значи за конкретната странност на VB. Определянето на типа на аргумента в скобите става според стойността му. :lol: Т.е. когато напишеш

Код:
Dim intarray(131072) As Integer


транслатора вижда, че 131072 > 32767 и сътветно пъха това число в променлива тип Long. Ако напишеш

Код:
Dim intarray(131072 * 5) As Integer


понеже отново 131072 > 32767, транслатора го приема за Long и после умножава по 5, като резултата е, че нямаш проблеми. :roll: Ако, обаче, напишеш

Код:
Dim intarray(1024 * 128) As Integer


след като 1024 < 32767, транслатора го приема за Integer, постава 1024 в променлива от тоя тип и после като умножи със 128 се получава препълване на Integer-a.
По повод на горното, че няма решение на проблема, малко поизлъгах, забравил съм тоя език. По принцип за цифровите константи има постфиксни определители на типа. Например, & е определител за Long, а # е определител за Double. Ако напишеш, например

Код:
Dim intarray(1024& * 128) As Integer


Няма да имаш проблеми, защото & force-ва транслатора да приема 1024 за Long, въпреки, че е < 32767. Същото се отнася, ако напишеш (1024# * 128) - в този случай 1024 ще се приеме за Double.


Пон Фев 13, 2006 12:38 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
Е, тва не го знаех!
Мерси, Реконструктор! :)
\:D/

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пон Фев 13, 2006 12:52 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни