VirtualProtect() schlägt fehl

17/10/2010 - 17:46 von olk | Report spam
Hallo,

ich habe ein Problem mit VirtualProtect() - es kehrt immer mit einem
Fehler zurück. Der Code sieht so aus:

void * mem = ::VirtualAlloc(
0, mem_size, MEM_PRESERVE|MEM_COMMIT, PAGE_READWRITE);
if ( ! mem)
throw std::bad_alloc();
if ( 0 == ::VirtualProtect( mem, pagesize, PAGE_NOACCESS, 0) )
throw std::bad_alloc();

Die Idee ist, daß die erste page vor Zugriffen geschütz wird.

Thx,
Oliver
 

Lesen sie die antworten

#1 Stefan Kuhr
17/10/2010 - 20:02 | Warnen spam
Hallo Oliver,

On 10/17/2010 5:46 PM, olk wrote:
Hallo,

ich habe ein Problem mit VirtualProtect() - es kehrt immer mit einem
Fehler zurück. Der Code sieht so aus:

void * mem = ::VirtualAlloc(
0, mem_size, MEM_PRESERVE|MEM_COMMIT, PAGE_READWRITE);
if ( ! mem)
throw std::bad_alloc();
if ( 0 == ::VirtualProtect( mem, pagesize, PAGE_NOACCESS, 0) )
throw std::bad_alloc();

Die Idee ist, daß die erste page vor Zugriffen geschütz wird.

Thx,
Oliver



Wenn VirtualProtect fehlschlaegt, setzt es den last error des Threads,
was bekommst Du denn da zurueck?

Als Randbemerkung sei hier noch erwaehnt, dass man das zwar schon so
machen kann wie Du das hier machst, naemlich exceptions zu werfen, aber
Du unterdrueckst/ignorierst hier erstens mal den last error, zweitens
ist die Gefahr hier sehr gross, dass Speicherlecks entstehen, wenn der
VirtualProtect fehlschlaegt und der von VirtualAlloc allozierte Speicher
nicht durch ein Objekt und dessen Destruktor wieder freigegeben wird
(selbiges fehlt in Deinem Code). Korrekten Code, der Exception Handling
verwendet zu schreiben ist nicht einfach, und obiger Code ist in dieser
Hinsicht keinesfalls korrekt.

S

Ähnliche fragen