Boost::interprocess: 无法使用 Managed_shared_memory 处理 interprocess_exception

发布于 2025-01-01 02:14:18 字数 754 浏览 3 评论 0原文

我有以下代码

try
{
    // Vector creation in shared memory. The shm must exist.
    m_pxShm = new managed_shared_memory(open_only, pcShmName);
    m_pxShm->construct<T>(pcVecName)[iSize]();  // THROW EXCEPTION <==
    m_xVectorPair = m_pxShm->find<T>(pcVecName);

    if (0 == m_xVectorPair.first)
    {
        throw std::exception();
    }
}
catch (std::exception)
{
    throw SharedMemoryVectorBadAllocException();
}

SharedMemoryVectorBadAllocException 使用 std::exception 作为基类。当我运行这段代码时,带有“construct”方法的行会抛出异常(因为我创建了一个大于共享内存的向量)。但抛出的异常没有得到处理,应用程序崩溃了。即使我逐行调试它,catch 语句也不会处理异常。我尝试使用 catch 参数 std::exception、interprocess_exception 等,但没有成功。我该如何处理异常?我使用的是 Visual Studio 2010。

I've the following piece of code

try
{
    // Vector creation in shared memory. The shm must exist.
    m_pxShm = new managed_shared_memory(open_only, pcShmName);
    m_pxShm->construct<T>(pcVecName)[iSize]();  // THROW EXCEPTION <==
    m_xVectorPair = m_pxShm->find<T>(pcVecName);

    if (0 == m_xVectorPair.first)
    {
        throw std::exception();
    }
}
catch (std::exception)
{
    throw SharedMemoryVectorBadAllocException();
}

The SharedMemoryVectorBadAllocException use std::exception as base class. When I run this piece of code, the line with the 'construct' method throws an exception (because I create a vector bigger than shared memory). But the thrown exception is not handled, and the application crashes. Even if I debug it, line by line, the exception is not handled by the catch statement. I've tried to use as catch argument std::exception, interprocess_exception, ... and so on, without success. How can I handle the exception ? I'm using Visual studio 2010.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文