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;