VirtualAllocについて – プログラミング – Home

通知
すべてクリア

[解決済] VirtualAllocについて


うーん
 うーん
(@うーん)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

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

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

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

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


引用未解決
トピックタグ
es
 es
(@es)
ゲスト
結合: 22年前
投稿: 17
 

MEM_RESERVEだから当然です。
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/memory/base/page_state.asp


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

> int *i;
> i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE,PAGE_READWRITE);
> *i=100;
> 上のようなコードを書いてみました。
> コンパイルは掛かるのですが、いざ実行してみると、アドレス何とかで違反な書き込み
> がありました。っていうエラーが出ます。

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

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

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


返信引用
うーん
 うーん
(@うーん)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

i=(int*)VirtualAlloc(NULL,sizeof(int),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
とすると上手くいきました。有り難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました