'Out of Memory' под Windows XP

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

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

О. ёлки, допёр!

Dim x() As String

Private Sub Command1_Click()
ReDim x(65535)
x(2) = "a"
MsgBox x(2)
ReDim Preserve x(65530)
MsgBox x(2)
End Sub

и всё пучком!
Хакер, респект!! ))

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

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

Хакер, респект!! ))

ммм... какие слова :wink: :D
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

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

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

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

Да там в общем-то к процедурам идёт... С помощью ZOrder(0) показывется очередное окно... Другое дело, что на форме много объектов, между которыми это переключение и происходит.
Но фишка в том, что эта хрень и просто так может вывалиться. Т.е. программа вообще ничего не делает, пользователь тоже, но вскоре после запуска Run-Time 7: Out of Memor. Это если включен режим Win2000. Если он не включен, то прям при запуске выдаётся таже проблема.

Чёта я подозреваю, что дело тут в самом масдае.
Надо бы попробовать на другой версии XP, т.к. больше вариантов нет. Внедрил динамические массивы, программа жрёт намного меньше места, но, повторюсь, она и когда дин.массивов не было занимала меньше многих других.

Значит либо грешить на большое кол-во контролов, либо на саму операционку...

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

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

Грешить надо на то что кто то создаёт объекты, причём в неограниченных количествах. Возможно дело в самой винде.
—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 (Вс) 2:29

Команд создающих объекты типа 'Load' у меня нет. Тем более нет таймера, который бы их постоянно создавал. Значит все же ось...

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

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

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

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

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

Может просто глюки с версиями контролов. Такое может быть. А ты попробуй выдавать какие-то мессаги перед обращением к контролам. Мне кажется, что дело не в массиве. Разметь прогу на участки небольшие и при начале участка выдавай мессагу. Постепенно сужая круг поиска ты найдешь место приводящее к глюку.

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

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

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

Не OCX.
Потому что уже ходил в этом направлении - создавал формы с разными использованными элементами и компилил в exe. Все они работали.

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

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

советую попробовать на другой винде. И всё станет на свои места.
—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 (Вс) 2:43

Да, наверное... Тогда где то в понедельник на работе проверю на XP Corporate edition, о результатах напишу.

Всем большое спасибо за советы!

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

Сообщение Особист » 20.07.2006 (Чт) 20:34

Всем привет!
Ещё в понедельник хотел посдвести итог, но чёта всё некогда.
Думаю, админы не сочтут за некрофилию поднятие старой моей же темы.
Кароче, переустановил я винду. На WinXp Professional SP2.
Никаких вышеописанных проблем НЕТ!!!

1) Походу, глючная сама винда, вот на всякий случай её версия:
WinXP 5.1 сборка 2600 xpsp1.020828-1920 Service Pack 1.
Обходите стороной.

2) После замены всех массивов со статических (65535 значений типа String) на динамические, прога в памяти стала вестиь В ТРИ РАЗА БОЛЬШЕ!!!
Мож кто подскажет, почему?

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

Сообщение Хакер » 20.07.2006 (Чт) 21:37

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

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

Сообщение Особист » 21.07.2006 (Пт) 11:35

Хакер
Чтобы это определить, нажимаю Ctrl+Alt+Del, иду в "Процессы", и смотрю значение Память для своего приложения...

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

Сообщение Хакер » 21.07.2006 (Пт) 17:33

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

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

Сообщение Особист » 22.07.2006 (Сб) 11:53

Хакер
Ну, весь код очень большой, примерно 20 форм и куча контролов, описаний и т.д.
Насчёт массивов, вот это в модуле:

Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInet As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Long

Public WorkPath, a As String, IOR As Byte, FileURL As String, LastURL As String, PageURL As String, imgerr As Byte
Public timelimit As Boolean, GU As String, GU2 As String, PausedGals(100) As String, PGC As Byte, FileUR As String, MinToTray As Byte

Public TGPs As Currency, TGPURL() As String, TGPInfo() As String, TGPActive() As Byte
Public Gals As Currency, GalURL() As String, GalInfo() As String, RefH As Integer
Public DLGals As Currency, DLURL() As String, DLInfo() As String, AutoStartDownloading As Byte
Public TempPath As String, MinLen, LenOfFile, Err1 As Byte, OTGPS, T, TgpList() As String, TgpTitle() As String, CurTitle As String
Public DLPath() As String, CurGenre As String, CurPath As String, AutoSync As Byte, FilesInDir As Currency
Public WriteHtml As Byte, WriteInfo As Byte, ImgVerify As Byte, urladd As Boolean, NewGals(256) As String, NewGalsCnt(256) As Integer, NewGalsTot As Integer, NewGalsStart(256) As Integer

Public Banlist() As String, Banned As Currency, ret, bai As Byte, DownloadVideo As Byte, Ver As String, SaveGalPath As String
Public StopDownload As Boolean, Busy As Boolean, QuickStop As Boolean, LoadImage As Boolean, Tmp, StopSync As Boolean

Public IncPath As String, GalPath As String, TargetDevice As String, TargetPath As String, FreeSpace As Long, Genres(1023) As String, GenresLC(1023) As Integer, LCs As Integer, GlobalSize As Currency, FullSize As Currency, SpaceLimit As Long, FC As Byte, vm As Long
Public Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long
Public Compl As Byte, SaveAfterBurn As Byte, Ent As Byte, Statuses(3) As String, AntiBanner As Byte, Language As String

Public Plugins As Byte, Plugin(255) As String, PluginName(255) As String, PluginVer(255) As String, PluginInfo(255) As String, PluginConfig(255) As String, PluginStat(255) As String, PluginExec(255) As String, PluginAut(255) As String
Public ErrGals As Currency, ErrURL() As String, ErrInfo() As String, LastPicBG As Long, BrBG As Long, IWBG As Long, LBBG As Long, HDDSize As Currency, PercFree As Integer, WaitMins As Integer

Public Cp(500) As String, URLTestResult As Byte, AddrTestResult As Byte, VideoGals As Currency, VideoURL() As String, VideoInfo() As String, RunMinimized As Byte, TestGals As Byte
Public KeepWP As Byte, DefSize As Byte, OV As String, AutoRun As Byte, AreReg As String, NoInetTest As Byte, Servs As Byte, ServURL(255) As String

Public InetTGPs As Currency, InetTgpInfo() As String, InetTgpURL() As String, ExpRes As String, RetT As String, Old1 As String, Old2 As String, CurLog As String, Old3 As String, DLType As Byte, MinStat As Byte

Public Sub ReDimTGPs()
ReDim Preserve TGPURL(TGPs + 1)
ReDim Preserve TGPInfo(TGPs + 1)
ReDim Preserve TGPActive(TGPs + 1)
End Sub

Public Sub ReDimInetTGPs()
ReDim Preserve InetTgpInfo(InetTGPs + 1)
ReDim Preserve InetTgpURL(InetTGPs + 1)
End Sub

Public Sub ReDimGALs()
ReDim Preserve GalURL(Gals + 1)
ReDim Preserve GalInfo(Gals + 1)
End Sub

Public Sub ReDimDLGALs()
ReDim Preserve DLURL(DLGals + 1)
ReDim Preserve DLInfo(DLGals + 1)
ReDim Preserve DLPath(DLGals + 1)
End Sub

Public Sub ReDimVideoGALs()
ReDim Preserve VideoURL(VideoGals + 1)
ReDim Preserve VideoInfo(VideoGals + 1)
End Sub

Public Sub ReDimBanned()
ReDim Preserve Banlist(Banned + 1)
End Sub

Public Sub ReDimErrGals()
ReDim Preserve ErrURL(ErrGals + 1)
ReDim Preserve ErrInfo(ErrGals + 1)
End Sub

И к примеру вот функция для добавление одного элемента за обращение:

Sub AddTGP(TGPName as string, TGPInfo as string)

for f=1 to tgps
if TGPURL(f) = TGPName then exit sub 'Объект существует
next f

TGPs = TGPs + 1
ReDimTGPs 'Обращение к модулю
TGPURL(TGPs) = TGPName
TGPInfo(TGPs) = TGPInfo

End Sub

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

Сообщение Хакер » 22.07.2006 (Сб) 16:15

Public Sub ReDimBanned()
ReDim Preserve Banlist(Banned + 1)
End Sub


Навело на нехорошие мысли... :wink:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение Особист » 22.07.2006 (Сб) 17:16

Хакер
Ты о названии функции?

Вообще-то в этом массиве, BanList(), хранятся URL тех линков, обращение проги на которые подвешивает её саму. А именно, это сбойные jpg, которые, между прочим, почему то намертво вешают программу будучи загружены в контрол Image или Picture...
Прога занимается закачкой изображений из Инета.

Если на нехорошие мысли навело Preserve, то без него все данные трутся...
А если выражение (Banned+1), то это специально для того, чтобы резервировался один лишний элемент в конце массива, в общем то на всякий случай.

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

Сообщение Хакер » 22.07.2006 (Сб) 17:44

навело на нехорошие мысли не Preserve а выгляденное слово B A N.

Хотя сам сейчас занимаюсь системой бана, для сайта.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение Особист » 22.07.2006 (Сб) 17:48

А, ясно :)
Не, прога юзеров не банит, только глючные картинки ))

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 25.07.2006 (Вт) 12:24

4.11
Последний раз редактировалось Al Khamid 03.11.2007 (Сб) 10:36, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.07.2006 (Вт) 12:36

Al Khamid писал(а):Ну, помнится, еще на Quick Basic сталкивался с такой ерундой ... учитывая то, что бейсику в DOS отводилось всего 64K (на все нужды), память кончалась моментально.

Емнип, в QB не было ограничения в 64К. Наверное, ты его путаешь с каким-нибудь TB.
Изображение

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

Сообщение Особист » 26.07.2006 (Ср) 0:57

Ну, это во многом похоже на встроенный бейсик ZX SPECTRUM'a :)

А всё же, я правильно понимаю, что динамических массив жрёт больше чем статический?

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

Сообщение keks-n » 26.07.2006 (Ср) 20:51

Емнип, в QB не было ограничения в 64К. Наверное, ты его путаешь с каким-нибудь TB.

Подтверждаю, что QB 4.5 при использовании более чем 64K начинал вопить, что ему не хватает памяти.
Изображение

Пред.

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

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

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

    TopList