VirtualAllocについて

[戻る]
うーん 2006/12/11(月) 23:26:33
かなり初心者です。初めて1週間ぐらい。
int *i;
i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE,PAGE_READWRITE);
*i=100;
上のようなコードを書いてみました。
コンパイルは掛かるのですが、いざ実行してみると、アドレス何とかで違反な書き込み
がありました。っていうエラーが出ます。

僕的には、共有メモリにintぶんのメモリが確保されてiにアドレスが帰ってくる。
そのアドレスに100を代入する。ってかんじなんですが、上手くいってないようです。

そもそも、おかしな事をやっているのかも知れませんが、色々サイトを当たってみても
ピントきません。

何故エラーが出るのか教えてください、お願いします。

es 2006/12/12(火) 00:12:46
MEM_RESERVEだから当然です。
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/memory/base/page_state.asp

瀬戸っぷ [E-Mail] 2006/12/12(火) 00:22:29
> int *i;
> i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE,PAGE_READWRITE);
> *i=100;
> 上のようなコードを書いてみました。
> コンパイルは掛かるのですが、いざ実行してみると、アドレス何とかで違反な書き込み
> がありました。っていうエラーが出ます。

エラーメッセージは正確に記述した方がよろしいかと思われますが。

VirtualAlloc使ったことはありませんが……
MEM_RESERVEでは予約するだけで、メモリの割り当ては行われていないのでは?
コミットする必要があったかと。

# ページサイズ単位(4k?)なので、int型1つに確保するのは大きすぎるような。

うーん 2006/12/12(火) 02:00:18
[[解決]]
i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
とすると上手くいきました。有り難うございました。

古いスレッドには追加発言できません。