Глюки с VirtualAlloc

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 5 Jun 2007.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вот сталкнулся с проблемой выделения памяти в нужном для меня месте.
    юзаю код:
    Code:
    windows.VirtualAlloc(pointer($00400000),$6000,MEM_COMMIT, PAGE_EXECUTE_READWRITE	);
    showmessage(sysutils.SysErrorMessage(GetlastError));
    
    При запуске выдает ошибку: The parameter is incorrect
    В опциях проекта указал IMAGE BASE = $00600000
    И вообще через дибагер запускаю - этот участок памяти абсолютно свободен! т.е. никем не выделен!
    Думал баг из-за дельвы. Но попробывал написать на ASM - тотже результат.
    Также заметил что при параметрах MEM_COMMIT+MEM_RESERVE вылетает ошибка: Attempt to access invalid address
     
    #1 slesh, 5 Jun 2007
    Last edited: 5 Jun 2007
    1 person likes this.
  2. Xserg

    Xserg Elder - Старейшина

    Joined:
    9 Dec 2006
    Messages:
    135
    Likes Received:
    127
    Reputations:
    53
    Попробуй так
    Code:
    var   MBI: MEMORY_BASIC_INFORMATION;
    VirtualQuery(pointer($400000),MBI,$1000);
    if (MBI.State and MEM_FREE) =	MEM_FREE then
    if (MBI.RegionSize -(dword(MBI.AllocationBase)-$400000)) >= $6000  then
      VirtualAlloc(pointer($00400000),$6000,MEM_COMMIT, PAGE_EXECUTE_READWRITE)
      else xyz;
    
    у меня при любом IMAGE BASE регион $00400000 занят.
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Пробывал. Нифега не хочет. Странная какаято винда