
CreateFileMapping を使用し アプリケーション間のデータ共有プログラムを作成しています。
CreateFileMapping には構造体を登録し その構造体で 文字列配列を動的に確保したいのですが
// 構造体
typedef struct {
char **huga;
} HOGE;
main ----------------------------------
// マップ
map = CreateFileMapping(
(HANDLE)0xffffffff,
NULL,
PAGE_READWRITE | SEC_COMMIT,
0, sizeof(HOGE),
"MAP_NAME");
// ビュー
data = ( HOGE * )MapViewOfFile( map, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(HOGE) );
// 初回
flag = ( GetLastError() == ERROR_ALREADY_EXISTS );
if ( !flag ) {
// 確保 1
data->huga = new char*[ 10 ];
for ( int i = 0; i < 10; i++ ) {
// 確保 2
data->huga[ i ] = new char[ 256 ];
sprintf_s( data->huga[ i ], 256, "[ %d ]", i );
}
}
// 確認
for ( int i = 0; i < 10; i++ ) {
MessageBox( NULL, data->huga[ i ], "MAP", MB_OK );
}
上記のようにすると
確保する前の構造体が Mappingされているのか データを共有することが出来ませんでした。
動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
例えばプロセスAとプロセスBがあったとして、この2つのメモリ領域(コード領域・スタック領域・ヒープ領域)は完全に独立しています。
よって、プロセスAのヒープ領域のアドレスをプロセスBに教えたとしてもアクセスする事は出来ません。
char **huga;
↓
char hoge[10][256];
などに変更するなどして受け渡しするしかないと思います。
No.1
- 回答日時:
動的確保では無理なんじゃないですかね。
ヒープ領域が共有メモリになっているワケではありませんし。
>動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。
ファイルマッピングに収まるようにコピーして受け渡す…とかでしょうかね。
普通にファイルを介して受け渡しするのとおなじような状況になるかと。
動的確保をVirtualAllocEx()を使うコトで、他プロセスからアクセスできる…かも知れません。
使ったことはないので検索してみて下さい。としか言えませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
allocってなんですか?
-
c言語のポインタへの文字列入力...
-
プログラムが途中で強制終了し...
-
ポインタのポインタの初期化法
-
デストラクタを呼びたい
-
newしないオブジェクトについて
-
アセンブラでのメモリの動的確...
-
malloc()関数内でセングメント...
-
【VC++6.0(MFC)】MessageBoxを...
-
行数の変動にも対応したファイ...
-
malloc呼び出し時のセグメンテ...
-
Win32APIでのメモリ管理について
-
スタック破壊の上手な見つけ方...
-
入れ子になった構造体について
-
関数から配列を返すには?
-
VBAのプログラムで、DIAG = 1# ...
-
C言語 配列の長さの上限
-
配列の要素数に変数を入れたい...
-
CStringからchar*への型変換に...
-
セグメントエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
ビットをローテートするプログ...
-
ヒープメモリの解放について
-
newしないオブジェクトについて
-
構造体でchar name[]と*nameの...
-
ポインタのポインタの初期化法
-
行列内の行の交換,列の交換を...
-
C++で、メンバもヒープに確保さ...
-
DLLのマルチスレッドの動作につ...
-
配列の添え字の最大数とは?
-
mallocで確保するメモリの領域...
-
C++のnewで確保したメモリーの...
-
C言語に関する質問
-
Win32APIでのメモリ管理について
-
変数に文字列を代入する方法を...
-
領域の確保について
-
free関数で動作が止まる
-
CreateFileMapping について
-
指定したメモリアドレスの値の...
おすすめ情報