У меня возникают проблемы при передаче данных по ссылке на определенный метод — когда метод обращается к данным, он поврежден, но я уверен, что при вызове метода это не так (по 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, Я вижу, что часть данных повреждена, а часть есть.
Почему код становится поврежденным? Что я должен делать? :Икс
Дополнительная информация:
Спасибо,
Momergil
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);