私はいくつかのプロセス間通信(VS 2015)を行うために、ブーストの共有メモリライブラリを使用しようとしています。私はexample onlineが非常に有用であることを発見しました。正気のために、私は共有メモリアドレスに書き込んだ値が私が望む値であるという簡単なチェックをしたいだけです。これを行うために、私はcoutを使って共有メモリの値を表示したいと思います。これは私が現在持っているコードです:コマンドラインへの共有メモリアドレス値の印刷
#include <boost\interprocess\shared_memory_object.hpp>
#include <boost\interprocess\mapped_region.hpp>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstring>
#include <cstdlib>
#include <string>
int main()
{
using namespace boost::interprocess;
struct shm_remove
{
shm_remove() { shared_memory_object::remove("MySharedMemory"); }
~shm_remove() { shared_memory_object::remove("MySharedMemory"); }
} remover;
//Create a shared memory object
shared_memory_object shm(create_only, "MySharedMemory", read_write);
//Set size to 1
shm.truncate(1);
//Map the whole shared memory in this process
mapped_region region(shm, read_write);
//Write all the memory to 1
std::memset(region.get_address(), 1, region.get_size());
//Check that memory was initialized to 1
char *mem = static_cast<char*>(region.get_address());
for (std::size_t i = 0; i < region.get_size(); ++i)
{
std::cout << "Memory value: " << *mem << "\n";
if (*mem++ != 1)
{
return 1; //Error checking memory
}
}
std::cout << "press any key to quit";
_getch();
}
コードが正常に動作し、エラーが、それは私が価値あるべきだと思うものを印刷しようとただしたときにマップされたメモリが1に設定されていることを確認したときにスローされていませんアドレスで、私はスマイリーフェイスを取得...
誰もが正しい方向に私を指すことができますか?私はいくつかの疑念を持っています(終了\ 0?)しかし、私は本当にここの内部動作を理解していません。どんな助けもありがとう!
'std :: cout <<"メモリ値: "<<(int)* mem <<" \ n ";' –
完璧な感謝! – willpower2727