Обнаружение взлома стека в G ++ Linux

В классе Packet () у меня есть этот метод, который сам инкапсулирует пакет сам по себе (т.е. добавляет перед ним 6 байтов заголовка, но, конечно, сначала выделяет необходимую память)
Тем не менее, это дает мне * Обнаружено разрушение стека *:

ИНТ
TmcPckt :: EncapsulateCCSDS (пустоты)
{

    // packet identification in primary header
UI16 primaryHdrPcktID;
primaryHdrPcktID = (TMC_CCSDS_PKT_VR_NBR << TMC_CCSDS_OFFSET_PKT_VR_NBR)
| (this->_tmcDirection << TMC_CCSDS_OFFSET_PKT_ID_PKT_TYP)
| (TMC_CCSDS_PKT_ID_HDR_FLG << TMC_CCSDS_OFFSET_PKT_ID_HDR_FLG)
| (this->_appId  << TMC_CCSDS_OFFSET_PKT_ID_APP_ID);// sequence control in primary header
UI16 primaryHdrSeqCtrl;
primaryHdrSeqCtrl =   (TMC_CCSDS_PKT_SEC_CTRL_SEQ_FLG << TMC_CCSDS_OFFSET_PKT_SEC_CTRL_SEQ_FLG)
| (TMC_CCSDS_PKT_SEC_CTRL_SEQ_CNT << TMC_CCSDS_OFFSET_PKT_SEC_CTRL_SEQ_CNT);

// packet length in primary header;
// should be the length in bytes of entire packet except primary header minus 1
UI16 primaryHdrPcktLen;
primaryHdrPcktLen = this->_dataSize - 1;

// convert data to network
primaryHdrPcktID = htons(primaryHdrPcktID);
primaryHdrSeqCtrl = htons(primaryHdrSeqCtrl);
primaryHdrPcktLen = htons(primaryHdrPcktLen);

// convert data to netwaSaSork
for (int i = 0; i < this->_dataSize; i++)
{
this->_dataBuffer[i] = htons(this->_dataBuffer[i]);
}

this->_packetSize = TMC_CCSDS_PRIM_HDR_LEN_BYTES + this->_dataSize;

this->_packetBuffer = (UI16 *) operator new(this->_packetSize/sizeof(UI16));

// copy data to destination memory: headers
this->_packetBuffer[TMC_CCSDS_PRIMARY_HDR_PCKT_ID] = primaryHdrPcktID;
this->_packetBuffer[TMC_CCSDS_PRIMARY_HDR_SEQ_CTRL] = primaryHdrSeqCtrl;
this->_packetBuffer[TMC_CCSDS_PRIMARY_HDR_PCKT_LEN] = primaryHdrPcktLen;// copy data to destination memory: payload
//    memcpy((void*) &this->_packetBuffer[TMC_CCSDS_DATA_PAYLOAD_AND_CMD], (void*) this->_dataBuffer, sizeof(UI16)*this->_dataSize);
memcpy((void*) &this->_packetBuffer[TMC_CCSDS_DATA_PAYLOAD_AND_CMD], (void*) this->_dataBuffer, this->_dataSize);

LogPrintBuffer(this->_packetBuffer, this->_packetSize/sizeof(UI16));

this->_encapsulated = true;

return STATUS_SUCCESS;
}

И я хотел бы выяснить, где (строка кода) это вызывает проблему …: / Я могу перекомпилировать с флагом, чтобы избежать обнаружения, но не могу заставить мою программу вызвать ошибку … так что я думаю, я не могу использовать GDB здесь. (плюс это вызывается в g_timeout_add (), так что вроде как в потоке)

Может ли Valgrind быть полезным?
Я делаю что-то уродливое / неправильное, выполняя new (), который никогда не будет освобожден

Могу ли я сделать это вместо этого?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]