rec*_*ion 1 c++ shared-memory boost-interprocess
这让我感到沮丧.我只是想创建一个共享内存缓冲类,它在通过Boost.Interprocess创建的共享内存中使用,我可以在其中读取/存储数据.我写了以下内容来测试功能
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <iostream>
using namespace std;
using namespace boost::interprocess;
int main( int argc, char* argv[] ) {
shared_memory_object::remove( "MyName" );
// Create a shared memory object
shared_memory_object shm ( create_only, "MyName", read_write );
// Set size for the shared memory region
shm.truncate(1000);
// Map the whole shared memory in this process
mapped_region region(shm, read_write);
// Get pointer to the beginning of the mapped shared memory region
int* start_ptr;
start_ptr = static_cast<int*>(region.get_address());
// Write data into the buffer
int* write_ptr = start_ptr;
for( int i= 0; i<10; i++ ) {
cout << "Write data: " << i << endl;
memcpy( write_ptr, &i, sizeof(int) );
write_ptr++;
}
// Read data from the buffer
int* read_ptr = start_ptr;
int* data;
for( int i= 0; i<10; i++ ) {
memcpy( data, read_ptr, sizeof(int) );
cout << "Read data: " << *data << endl;
read_ptr++;
}
shared_memory_object::remove( "MyName" );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会将数据写入OK,但memcpy在读取循环中第一次写入段错误.gdb说如下:
程序收到信号EXC_BAD_ACCESS,无法访问内存.原因:地址为KERN_INVALID_ADDRESS:__ memcpy()中的0x0000000000000000 0x00007fffffe007c5
(gdb)在哪里
#c 0x00007fffffe007c5在__memcpy()#1 0x0000000100000e45 in main(argc = 1,argv = 0x7fff5fbff9d0)at try.cpp:36
功能如此简单,我不知道我缺少什么.任何帮助都感激不尽.
小智 6
data并没有被指出任何事情.(确保正在编译程序并启用所有警告.)看起来它不应该是指针.
第二个循环应该是:
int* read_ptr = start_ptr;
int data;
for( int i= 0; i<10; i++ ) {
memcpy( &data, read_ptr, sizeof(int) );
cout << "Read data: " << data << endl;
read_ptr++;
}
Run Code Online (Sandbox Code Playgroud)