多次成功写入后,Qt QSharedMemory分段错误

多次成功写入后,Qt QSharedMemory分段错误,qt,shared-memory,qtembedded,Qt,Shared Memory,Qtembedded,我使用QSharedMemory来存储一些数据,并希望随后将数据附加到其中包含的内容中。因此,我使用新数据多次调用以下代码。“audioBuffer”是提供给此函数的新数据。我可以调用这个函数大约4-7次(并且会有所不同),然后在memcpy操作中查找故障。QSharedMemory位置的大小是巨大的,因此在seg故障之前的几次调用中,memcpy将数据复制到其边界之外是没有问题的。此外,m_SharedAudioBuffer.errorString()在memcpy操作之前不提供任何错误。目前

我使用QSharedMemory来存储一些数据,并希望随后将数据附加到其中包含的内容中。因此,我使用新数据多次调用以下代码。“audioBuffer”是提供给此函数的新数据。我可以调用这个函数大约4-7次(并且会有所不同),然后在memcpy操作中查找故障。QSharedMemory位置的大小是巨大的,因此在seg故障之前的几次调用中,memcpy将数据复制到其边界之外是没有问题的。此外,m_SharedAudioBuffer.errorString()在memcpy操作之前不提供任何错误。目前,我只有一个进程使用这个QSharedMemory段。我还尝试不每次追加就连续写入,这很好,所以当我尝试向共享内存段追加更多数据时,会发生一些事情。有什么想法吗?谢谢

    // Get the buffer size for the current audio buffer in shared memory
    int bufferAudioDataSizeBytes = readFromSharedAudioBufferSizeMemory(); // This in number of bytes

    // Create a bytearray with our data currently in the shared buffer
    char* bufferAudioData = readFromSharedAudioBufferMemory();
    QByteArray currentAudioStream = QByteArray::fromRawData(bufferAudioData,bufferAudioDataSizeBytes);
    QByteArray currentAudioStreamDeepCopy(currentAudioStream);

    currentAudioStreamDeepCopy.append(audioBuffer);
    dataSize = currentAudioStreamDeepCopy.size();

    //#if DEBUG
    qDebug() << "Inserting audio buffer, new size is: " << dataSize;
    //#endif

    writeToSharedAudioBufferSizeMemory( dataSize ); // Just the size of what we received

    // Write into the shared memory
    m_SharedAudioBuffer.lock();

    // Clear the buffer and define the copy locations
    memset(m_SharedAudioBuffer.data(), '\0', m_SharedAudioBuffer.size());
    char *to = (char*)m_SharedAudioBuffer.data();
    char *from = (char*)audioBuffer.data();

    // Now perform the actual copy operation to store the buffer
    memcpy( to, from, dataSize );

    // Release the lock
    m_SharedAudioBuffer.unlock();

问题似乎是我在共享内存段返回的指针上使用了QByteArray的::fromRawData。当我在此指针上使用memcpy显式复制该数据,然后使用复制的数据构造QByteArray时,seg故障停止

# cd /tmp/
# ls
QtSettings
lib
qipc_sharedmemory_AudioBufferData2a7d5f1a29e3d27dac65b4f350d76a0dfd442222
qipc_sharedmemory_AudioBufferSizeData6b7acc119f94322a6794cbca37ed63df07b733ab
qipc_systemsem_AudioBufferData2a7d5f1a29e3d27dac65b4f350d76a0dfd442222
qipc_systemsem_AudioBufferSizeData6b7acc119f94322a6794cbca37ed63df07b733ab
qtembedded-0
run