我在通过引用给定方法传递数据时遇到问题 - 当方法访问数据时,它已损坏,但我确信在调用方法时它不是(通过debuggin)。这是代码:
//Calling code
const void* tempPointer = array.mid(readerPos,RE8K_ICDEF_HARMONICS_SIZE).constData();
const re8k_ics_harmonics* const newStruct = static_cast< const re8k_ics_harmonics* >(tempPointer);
DSInstance().updateHarmonics(*newStruct);
//method
void DataStream::updateHarmonics(const re8k_ics_harmonics &infoHarmonics, ...)
{
//Use infoHarmonics
}
因此,如果我使用调试器并在最后一行的“调用代码”中放置一个断点并观察 newStruct 中的内容,我会看到数据是完美的应有的。调用方法然后我放了一个新的断点(或者去“下一行”),直到进入 updateHarmonics 里面的第一行,当我看到 infoHarmonics 的内容时,我看到部分数据已损坏,部分数据存在。
为什么代码被破坏了?我该怎么办? :X
其他信息:
谢谢,
Momergil
答案 0 :(得分:3)
QByteArray QByteArray::mid (int pos, int len = -1 ) const
此函数按值返回对象,因此在行
中const void* tempPointer = array.mid(readerPos,
RE8K_ICDEF_HARMONICS_SIZE).constData();
你正在指向临时数据。该指针仅在下一行中无效。您应该在堆上创建对象或使用堆栈分配的实例,例如:
QByteArray midQ = array.mid(readerPos, RE8K_ICDEF_HARMONICS_SIZE);
const void* tempPointer = midQ.constData(); // pointer valid as long
// as midQ breaths
const re8k_ics_harmonics* const newStruct =
static_cast< const re8k_ics_harmonics* >(tempPointer);
DSInstance().updateHarmonics(*newStruct);