我有一个简单的函数,它使用 Qt 的 (5.5.1) QSharedMemory 类将字符串(uri 链接或文件路径)发送到已经运行的应用程序实例。
它似乎在大多数情况下都能正常工作,但我从用户那里捕获了一个崩溃日志,它在 memcpy 上崩溃了。该函数如下所示:
void WindowsApp::SendData( char* uri )
{
int size = 1024;
if (!m_SharedMemory.create(size)) {
qDebug() << "Unable to create shared memory segment." << m_SharedMemory.error();
return;
}
m_SharedMemory.lock();
char *to = (char*)m_SharedMemory.data();
const char *from = uri;
memcpy(to, from, qMin(m_SharedMemory.size(), size));
m_SharedMemory.unlock();
QThread::sleep(10);
}
m_SharedMemory 是类的 QSharedMemory 类型的静态成员。
从日志中,我看到我尝试发送的字符串是一个简单的文件路径,没有特殊字符,而且不太长,只有 150 个字符。
有什么问题,但是我无法用类似的参数重现它?