
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
C言語に関する質問
-
C言語 mallocとfreeについて
-
ビットをローテートするプログ...
-
メモリ解放について
-
画像を読み込む配列の確保。
-
文字列のメモリ保持期間とポイ...
-
ポインタのポインタの初期化法
-
reallocについて
-
配列の添え字の最大数とは?
-
スタック破壊の上手な見つけ方...
-
allocってなんですか?
-
文字列ポインタとgets関数の関...
-
グローバル変数のサイズ
-
newでrealloc?
-
プログラムが途中で強制終了し...
-
newしないオブジェクトについて
-
16進ダンプのプログラム
-
mallocで確保するメモリの領域...
-
free関数で動作が止まる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
malloc呼び出し時のセグメンテ...
-
入れ子になった構造体について
-
ヒープメモリの解放について
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
void*型のデータサイズ
-
Win32APIでのメモリ管理について
-
配列の添え字の最大数とは?
-
C++のnewで確保したメモリーの...
-
プログラムが途中で強制終了し...
-
C言語 mallocとfreeについて
-
win32APIのHeapAlloc()の使い方...
-
LoadLibraryでAccess Violation...
-
グローバル変数のサイズ
-
MFCのCStringについて
-
メモリ不足になってしまう。
-
ヒープの実際の限界値は?
おすすめ情報