'Out of Memory' под Windows XP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

'Out of Memory' под Windows XP

Сообщение Особист » 16.07.2006 (Вс) 0:47

Люди!
Нихрена не могу понять, достала уже эта бяка!
Сделал проект на VB, откомпилил - под Win98, Win2k прёт без проблем. Даже под Windows95 работает! А под этой долбаной ХР пишет, Out of Memory...
Мож кто сталкивался... Я под ХРюшей вообще стараюсь не работать, но по=хорошему то прога должна себя на любой операционке хорошо чувствовать...
:?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 0:56

Проге памяти не хватает. Причём тут WinXP?
Изображение

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:00

А вот в том и дело, что ХРен её знает!
На остальных осях работает как надо!
К тому же на компе гиг оперативы, а прога в хучшем случае жрёт памяти мегов пять-шесть!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 1:04

А если под IDE?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:04

а ты уверен что это так.

Например сколько жрут другие проги.

И ведь нагрузить память не так то трудно. Одной строчки хватит

Space CLng(256) * CLng(256) * CLng(256) * CLng(256)

и потом есть ещё такое понятие как виртуальная память...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 1:07

Тут скорее всего, что-то неправильно спроектировано.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 16.07.2006 (Вс) 1:13

Покажи код, на котором начинается Out of memory.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:13

В смысле-под IDE?

В общем, прога работает с большим количеством web-адресов.
Поскольку это кол-во всегда увеличивается, в памяти зарезервировано примерно так:

В модуле:

Public TGPs as Long, TGPURL(65535) as string, TGPInfo(65535) as string и т.д.

В общем-то мне и самому не нравится, что память впустую пропадает, но честно говоря не знаю как можно по другому.

НО !!! В любом случае прога занимает в памяти меньше места в 10 раз (!!!) чем та же Опера, и работает нормально ВЕЗДЕ, кроме этой самой WinXP :shock:

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:14

Amed
Если б оно так просто... Эта хрень может выскочить в любой момент и где угодно! Причём сама-то прога компилится нормально, а глюк возникает с exeшником...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:17

Особист писал(а):Amed
Причём сама-то прога компилится нормально, а глюк возникает с exeшником...


Ага, а такой тикие слова как Run-Time тебе ничего не говорят?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 1:17

На самом деле пустая строка-4 байта...
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:19

Что то мне подсказывает, что там можно заюзать динамический массив.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:21

Run-Time - ошибка в процессе выполнения?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:23

ну типа того :lol:

ДА, естественно.
Последний раз редактировалось Хакер 16.07.2006 (Вс) 1:24, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:24

Хакер
Ну сторго не судите, все таки я любитель... Как можно описать динамический массив. На гугле нашёл про ReDim, но он не подходит, т.к. надо, чтоб к массиву можно было обратиться из любой процедуры любой формы...

И всё равно, я бы понял если везде, но только в ХР... ((

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 1:24

Действительно нужны дин. массивы, но ИМХО, дело не в этом... Не может пара мегов занятой памяти давать такой эффект
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.07.2006 (Вс) 1:25

Особист писал(а):На гугле нашёл про ReDim, но он не подходит, т.к. надо, чтоб к массиву можно было обратиться из любой процедуры любой формы...

Простите... а... как redim связан со степенью доступности массива?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:28

Ну, опять же, как я понимаю, например

Sub NewSub ()

X = 255
ReDim Array1(x)

...

End sub

А чтобы все процедуры обращались к массиву, надо в начале кода описать переменные, типа
Dim Array1(255)

...

А если глубина массива уже задана, как я могу из какой-либо процедуры её поменять...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:29

GSerg, аффтар попробовал поюзать ReDim в General Declarations и видимо не то понял.

To "Особист":

Dim делай в глобальной области определения а ReDim в процедуре.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:30

keks-n писал(а):Действительно нужны дин. массивы, но ИМХО, дело не в этом... Не может пара мегов занятой памяти давать такой эффект


Ну вот и я об этом!
Щас попробовал поставить опцию для екзешника в WinXP как "совместимость с Win2k".. Запустилась... Проработала до первого щелчка на произвольном батоне и вылетела с тем же самым Out of memory

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:32

Блин туплю наверное, но

Dim x(1) As String

Private Sub Command1_Click()
ReDim x(65535)
End Sub

по нажатии пишет, что масив уже задан.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.07.2006 (Вс) 1:34

Скажи мне, Особист...
В приведённой модели использования, какая нафиг разница между dim и redim?
Если ты хочешь использовать redim так, не используй его вообще.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:37

Особист, ReDim имеет смысл использовать если добавляется не 65536 элементов а произвольное количество. Я так понял что ты берёшь заведомо большое число, чтобы уж точно всё поместилось в массиве.

Но если ты заносишь в него три строчки стоит сделать это так

Код: Выделить всё
Dim x() As String

Private Sub Command1_Click()
ReDim x(NumberOfStrings)
End Sub

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:37

Ну, имелось в виду, что переназначить глубину массива не получается.
Конечно же, в проге оно вместо 65535 была бы изменяемая переменная.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 1:39

А что есть глубина массива. Многоуровневость что-ли?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:41

ВСЁ! Я понял!!!

Спасибо, теперь прога жрёт меньше памяти.

Но это тем не менее ничего не меняет! В 2k нормально, в XP- простите, жопа...

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 1:44

Насчёт РеДима.

Вот есть массив, грузится он из файла или ещё откуда пох главное что массив этот заполнен скажем 100 элементами.
Вот появляется необходимость добавить 101-й...

Count=Count+1
ReDim Array1(Count)
Array1(Count) = NextRecord

В результате весь массив потёрся, за исключением последнего добавленного элемента.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 16.07.2006 (Вс) 2:05

А можно узнать у автора, какие он использует контролы? В смысле нестандартные?
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 16.07.2006 (Вс) 2:09

Oxygen писал(а):А можно узнать у автора, какие он использует контролы? В смысле нестандартные?

В смысле какие ocx?
taskicon.ocx, SSubTmr6 (без неё не пашет контрол XPButton скачанный с этого же сайта), MsFlxGrd, mscomctl, comdlg32... вроде бы все))

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 2:10

Особист писал(а):Насчёт РеДима.
Count=Count+1
ReDim Array1(Count)
Array1(Count) = NextRecord



А где презерв?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 51

    TopList