이것은 좌절감을 불러 일으키고 있습니다. Boost.Interprocess를 통해 생성 된 공유 메모리에서 사용하는 공유 메모리 버퍼 클래스를 만들려고합니다. 데이터를 읽고 저장할 수 있습니다. 나는 기능boost.interprocess의 공유 메모리에서 memcpy가 나오는 문제
#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;
}
내가 이것을 실행하면 데이터의 확인을 기록하지만, 세그먼테이션 폴트 (segfault) 읽기 루프의 첫 번째 memcpy
에를 테스트하려면 다음을 썼다. gdb는 다음을 말합니다 :
프로그램 수신 신호 EXC_BAD_ACCESS, 메모리에 액세스 할 수 없습니다. __memcpy에 0x0000000000000000 0x00007fffffe007c5()
(GDB) 여기서
# __memcpy 0 0x00007fffffe007c5() # 주 1 0x0000000100000e45 (ARGC = 1 ARGV = 0x7fff5fbff9d0) 시도 : 이유 : 주소 KERN_INVALID_ADDRESS .cpp : 36
기능이 너무 간단해서 내가 무엇을 놓쳤는 지 모릅니다. 어떤 도움을 많이 주시면 감사하겠습니다.
(홍당무), 확실히 나를 조밀하게 느끼게합니다! TIQL (일시적인 IQ 손실)으로 고통 받고 있습니다 (일시적이라고 생각합니다). 감사합니다. – recipriversexclusion