1

QSharedMemory 正在改变我的大小。

创造:

    ...
int size = buffer->size();
    qDebug() << "buffer->size()" << size << "points" << points->size() << "share name" << sharedMemoryName;
    if (!m_sharedMemory->create(size)) {
        qCritical() << tr("Unable to create shared memory segment.");
        return;
    }
    m_sharedMemory->lock();
    char *to = (char*)m_sharedMemory->data();
    memcpy(to, buffer->data(), qMin(m_sharedMemory->size(), size));
    m_sharedMemory->unlock();

读:

QSharedMemory sharedMemory(sharedMemoryName);
    if (!sharedMemory.attach(QSharedMemory::AccessMode::ReadOnly)) {
        qCritical() << "Unable to attach to shared memory segment.";
        return nullptr;
    }
    qDebug() << sharedMemoryName << sharedMemory.size();

大小不一样。创建时大小为 658824 读取时大小为 659456

好的 - 现在听起来很疯狂,但我多次运行读取,突然大小是正确的。然后我重新启动了所有东西(创建时大小相同),错误又回来了。

编辑:

我刚刚意识到 QSharedMemory 的大小不一定与 QBuffer 相同

memcpy(to, buffer->data(), qMin(m_sharedMemory->size(), size));

为什么会这样,我怎么能知道“在另一边”正确的大小(没有做出丑陋的解决方法)

编辑2:我可能会找到它。看起来 QSharedMemory 将内存保留在 4096 个块中。

我的解决方案是检查 QByteArray 是否为空

if(in.at(i) == QChar(0))
            break;
4

0 回答 0