Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > PureBasic

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Закрытая тема
 
Опции темы
Старый 03.10.2008, 19:07   #1
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений
(для 410 пользователей)
Помогите, вылетает Invalid Memory Acces

Помогите, пожалуйста, кто нибудь. При компилляции вылетает на втором (i=1) цикле на строке *L_Serial=AllocateMemory(4). Только не надо говорить о неразумном расходовании памяти, в программе и не такое может встретиться. Пробовал компилить на PB 4.01 и 4.20. В чем тут ошибка не пойму
;OpenLibrary(0, "kernel32.DLL")


For i=0 To 25

Debug i

  *S_Drive=AllocateMemory(256)
  PokeS(*S_Drive,Chr(65+i)+":\")
  
  *S_Volume=AllocateMemory(256)
  PokeS(*S_Volume,Space(256))
  
  *L_Volume=AllocateMemory(4)
  PokeL(*L_Volume,256)
  
  *L_Serial=AllocateMemory(4)
  PokeL(*L_Serial,0)
  
  *L_Max=AllocateMemory(4)
  PokeL(*L_Max,0)
  
  *L_Flags=AllocateMemory(4)
  PokeL(*L_Flags,0)
  
  *S_FileSys=AllocateMemory(256)
  
  *L_FileSys=AllocateMemory(4)
  PokeL(*L_FileSys,256)

  ;res=CallFunction(0, "GetVolumeInformationA",*S_Drive,*S_Volume,*L_Volume,*L_Serial,*L_Max,*L_Flags,*S_FileSys,*L_FileSys)

  If res=1
    Debug  "path "+PeekS(*S_Drive)
    Debug  "volume name "+ PeekS(*S_Volume)
    Debug  "Serial "+Str(PeekL(*L_Serial))
    Debug  "Flags "+Str(PeekL(*L_Flags))
    Debug  "File system "+PeekS(*S_FileSys)
  EndIf

 *S_DriveName=AllocateMemory(256)
 PokeS(*S_DriveName,Chr(65+i)+":\")

 *L_Free=AllocateMemory(8)
 PokeQ(*L_Free,0)

 *L_Total=AllocateMemory(8)
 PokeQ(*L_Total,0)

 *L_Avial=AllocateMemory(8)
 PokeQ(*L_Avial,0)

; res=CallFunction(0, "GetDiskFreeSpaceExA",*S_DriveName,*L_Free,*L_Total,*L_Avial)

 If res=1
   Debug  "path "+PeekS(*S_Drive)
   Debug  "Free "+Str(PeekQ(*L_Free)/1048576)
   Debug  "Total "+Str(PeekQ(*L_Total)/1048576)
   Debug  "Aviable "+Str(PeekQ(*L_Avial)/1048576)
 EndIf


Next
(Offline)
 
Старый 05.10.2008, 20:34   #2
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Помогите, вылетает Invalid Memory Acces

Жжошь Выделять по 4 байта памяти на переменные это сильно, да
Define.s root_name, volume_name, system_name
Define.l volume_serial, max_length, system_flags
Define.q free_bytes_avail, total_bytes, total_free_bytes

volume_name = Space(#MAX_PATH)
system_name = Space(#MAX_PATH)
drives_avail = GetLogicalDrives_()
For i = 0 To 31
    If ((drives_avail >> i) & 1)
        root_name = Chr(i + 65) + ":\"
        If (GetVolumeInformation_(root_name, @volume_name, #MAX_PATH, @volume_serial, @max_length, @system_flags, @system_name, #MAX_PATH))
            Debug "Root name " + root_name
            Debug "Volume name " + volume_name
            Debug "Serial " + Hex(volume_serial)
            Debug "Flags " + Str(system_flags)
            Debug "File system " + system_name
        EndIf
        If (GetDiskFreeSpaceEx_(root_name, @free_bytes_avail, @total_bytes, @total_free_bytes))
            Debug "Free bytes available " + Str(free_bytes_avail >> 20)
            Debug "Total bytes " + Str(total_bytes >> 20)
            Debug "Total free bytes " + Str(total_free_bytes >> 20)
        EndIf
    EndIf
Next
End
(Offline)
 
Сообщение было полезно следующим пользователям:
MadMedic (08.10.2008)
Старый 05.10.2008, 20:47   #3
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Помогите, вылетает Invalid Memory Acces

Еще кстати можно использовать GetLogicalDriveStrings_ для того чтобы не перебирать все возможные диски:
Define.s drives, root_name, volume_name, system_name
Define.l length, volume_serial, max_length, system_flags
Define.q free_bytes_avail, total_bytes, total_free_bytes

volume_name = Space(#MAX_PATH)
system_name = Space(#MAX_PATH)
drives = Space(#MAX_PATH)
length = GetLogicalDriveStrings_(#MAX_PATH, @drives) - 1
For i = 0 To length Step 4
    Debug "Root name " + PeekS(@drives + i)
    If (GetVolumeInformation_(@drives + i, @volume_name, #MAX_PATH, @volume_serial, @max_length, @system_flags, @system_name, #MAX_PATH))
        Debug "Volume name " + volume_name
        Debug "Serial " + Hex(volume_serial)
        Debug "Flags " + Str(system_flags)
        Debug "File system " + system_name
    Else
        Debug "Unavaliable"
    EndIf
    If (GetDiskFreeSpaceEx_(root_name, @free_bytes_avail, @total_bytes, @total_free_bytes))
        Debug "Free bytes available " + Str(free_bytes_avail >> 20)
        Debug "Total bytes " + Str(total_bytes >> 20)
        Debug "Total free bytes " + Str(total_free_bytes >> 20)
    EndIf
    Debug "------------------"
Next
End
(Offline)
 
Старый 08.10.2008, 07:02   #4
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений
(для 410 пользователей)
Re: Помогите, вылетает Invalid Memory Acces

Спасибо!
(Offline)
 
Закрытая тема


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите определиться Sqrt 3D-программирование 29 21.04.2009 22:38
столкновения с обьектами сделанными Cartography shop 4 klopmaks Blitz3D 0 21.02.2009 21:10
Проекты в Blitz. Почему мало завершенных проек turBO Проекты на Blitz3D 79 29.10.2008 16:49
А вот и ещё тема по текстурированию ландшk CRASHER Создание текстур 4 16.01.2008 18:10
не могу в Physx поворачивать Joint быстро, помогите! CRASHER Физика 18 12.01.2008 17:55


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com