2011-10-31 24 views

回答

0

您的代碼存在的問題是p存儲在堆棧中。通過調用VirtualProtectEx,它會影響整個頁面,而不僅僅是p(每個內存頁面是最小的實體,不能進一步分割)。因此,如果您嘗試更改權限p,它將更改整個頁面(您的案例中的整個堆棧)的權限。如果你使堆棧只讀,那麼就不可能再執行你的程序,並且會導致你有內存訪問衝突異常。所以,爲了解決這個問題,考慮在堆中分配p,並在完成後釋放它們。

+0

char a [10]; void * p =&a; a是函數中的變量,p是指向 地址的指針。 所以我想問我是否想要更改變量a的屬性, 如何將其設置爲READONLY並且不會訪問衝突或我無法更改它,因爲它會影響整個頁面而不僅僅是變量 感謝 – user1021319

+0

是的,一個'仍然分配在堆棧中,而不是在堆中。 **出於任何原因**如果您使堆棧爲只讀,您的程序將無法繼續執行。因此,在堆中分配這個。使用'char * p =(char *)malloc(sizeof(char [10]))' – JosephH

+0

謝謝,我知道了 – user1021319