かなり初心者です。初めて1週間ぐらい。
int *i;
i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE,PAGE_READWRITE);
*i=100;
上のようなコードを書いてみました。
コンパイルは掛かるのですが、いざ実行してみると、アドレス何とかで違反な書き込み
がありました。っていうエラーが出ます。
僕的には、共有メモリにintぶんのメモリが確保されてiにアドレスが帰ってくる。
そのアドレスに100を代入する。ってかんじなんですが、上手くいってないようです。
そもそも、おかしな事をやっているのかも知れませんが、色々サイトを当たってみても
ピントきません。
何故エラーが出るのか教えてください、お願いします。
MEM_RESERVEだから当然です。
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/memory/base/page_state.asp
> int *i;
> i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE,PAGE_READWRITE);
> *i=100;
> 上のようなコードを書いてみました。
> コンパイルは掛かるのですが、いざ実行してみると、アドレス何とかで違反な書き込み
> がありました。っていうエラーが出ます。
エラーメッセージは正確に記述した方がよろしいかと思われますが。
VirtualAlloc使ったことはありませんが……
MEM_RESERVEでは予約するだけで、メモリの割り当ては行われていないのでは?
コミットする必要があったかと。
# ページサイズ単位(4k?)なので、int型1つに確保するのは大きすぎるような。
i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
とすると上手くいきました。有り難うございました。