2013-03-19 4 views
0

QSharedMemory를 사용하여 일부 데이터를 저장하고 거기에 포함 된 데이터에 데이터를 추가하려고합니다. 그래서 나는 새로운 데이터로 다음 코드를 여러 번 호출한다. "audioBuffer"는이 함수에 주어진 새로운 데이터입니다. memcpy 작업에서 오류가 발생하기 전에이 함수를 약 4-7 회 호출 할 수 있습니다. QSharedMemory 위치의 크기가 너무 커서 일부 오류가 발생하기 전에 memcpy가 경계를 넘어 데이터를 복사하는 문제는 없습니다. 또한 m_SharedAudioBuffer.errorString()은 memcpy 연산까지 오류를주지 않습니다. 현재,이 QSharedMemory 세그먼트를 사용하는 프로세스는 하나뿐입니다. 또한 매번 추가하지 않고 지속적으로 글을 쓰려고 시도 했으므로 잘 작동하므로 공유 메모리 세그먼트에 더 많은 데이터를 추가하려고하면 어떤 일이 발생합니다. 어떤 아이디어? 감사!Qt QSharedMemory 여러 번 성공한 쓰기 후 분할 오류

EDIT : 아마도 내 대상 장치가 매우 작기 때문일 수 있습니다. 공유 메모리에 쓰기를 시도 할 때 사용 가능한 RAM이 크지 만/tmp 디렉토리 (4MB 만 제공)에서 다음 항목이 있음을 알 수 있습니다. - 크기가/tmp에서 거의 소모되지 않지만, 나는 더 많은 메모리를 할당 할 수없는 이유도 QSharedMemory는 :: 메서드를 만들 m 확실하지 않을 960000 내 최대 크기 실패하지 :

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

답변

0

문제 것은 내가에 QByteArray의 :: fromRawData를 사용하는 것을 할 듯 포인터는 공유 메모리 세그먼트에 의해 반환됩니다. 이 포인터에 memcpy를 사용하여 데이터를 명시 적으로 복사 한 다음 복사 한 데이터를 사용하여 내 QByteArray를 구성하면 seg 결함이 중지되었습니다.