小编Sau*_*loi的帖子

boost::shared_ptr 为 void *,反之亦然

我正在用 C 开发一个应用程序,我需要在其中使用 3rd 方 C++ 库。所以,我基本上是在围绕 C++ 库编写一个包装器,以便可以从我的纯 C 应用程序中调用它。库中的某些方法返回 boost::shared_ptr 类型的指针,我需要将其转换为void* [for C] 然后将其转换回 boost::shared_ptr 类型以重用它进行进一步处理。我使用以下方法进行转换:

作废*:

void * func1()
{
    //after the boost::shared_ptr is created
    return static_cast<void *> (SHARED_PTR.get())
}
Run Code Online (Sandbox Code Playgroud)

从 void* :

void func2(void * VOID_PTR) //VOID_PTR returned by func1
{
    boost::shared_ptr<T> SHARED_PTR = *(boost::shared_ptr <T> *)(VOID_PTR);
}
Run Code Online (Sandbox Code Playgroud)

但是,我在 func2 中收到了 SIGSEGV,我相信这是因为 shared_ptr 被释放,因为它的引用计数为 0。

我正在寻找正确的方法来进行这种转换以及来自 SO 社区专家的建议。

提前致谢!

c c++ boost

6
推荐指数
1
解决办法
7570
查看次数

如何在C中具有共享内存的两个不相关进程之间共享带有指针的结构?

我有一个看起来像这样的结构:

typedef struct shared_data_t
{
    char *key;
    char *message;
}shared_data;
Run Code Online (Sandbox Code Playgroud)

我需要与另一个不相关的进程共享这个结构。我使用 POSIX 共享内存和 shm_open()/mmap() 来实现此目的。然而,我的目标进程没有获取共享数据,并且它因 SIGSEGV 而终止,这是显而易见的。如果有人在这方面帮助我,特别是在具有共享内存的两个进程之间共享指针(使用 shm_open 和 mmap)时会发生什么,那就太好了。

对于这样的结构,

typedef struct shared_data_t
{
    char key[8];
    char message[32];
}shared_data;
Run Code Online (Sandbox Code Playgroud)

一切正常!

c linux posix memory-management shared-memory

4
推荐指数
1
解决办法
2110
查看次数

标签 统计

c ×2

boost ×1

c++ ×1

linux ×1

memory-management ×1

posix ×1

shared-memory ×1