我有以下事件序列:
for(int i = 0; i < 4; i++)
{
int seqNum;
int ackNum;
int pldSize;
char* payload = (char*)malloc(DEFINED_SIZE);
//buffer updated each loop, assume: 140hello!
Packet::decap(buffer, seqNum, ackNum, pldSize, payload);
Packet p = Packet(seqNum, ackNum, pldSize, payload);
dataMap.insert(pair<int,struct Packet>(seqNum, p));
}
...
struct Packet
{
Packet(int,int,int,char*);
int seqNum;
int ackNum;
int payloadSize;
char* payload;
char* encap();
static void decap(char* datagram, int & seqn, int & ackn, int & bytes, char* pyld);
};
void
Packet::decap(char* datagram, int & seqn, int & ackn, int & bytes, char* pyld)
{
memcpy(&seqn, datagram, sizeof(int));
memcpy(&ackn, &datagram[4], sizeof(int));
memcpy(&bytes, &datagram[8], sizeof(int));
memcpy(pyld, &datagram[12], bytes);
}
Packet::Packet(int seq, int ack, int sz, char* pld)
{
seqNum = seq;
ackNum = ack;
payloadSize = sz;
memcpy(pld, &payload, sz);
}
...
map<int, struct Packet>::iterator dataIter = dataMap.begin();
while(dataIter != dataMap.end())
{
outfile.write(dataIter->second.payload, dataIter->second.payloadSize); //<<< Crash
dataIter++;
}
我无法弄清楚我在哪一点复制/破坏了我的有效负载
内存。有没有人立即看到我丢失的任何内容?
最佳答案
这条线似乎是罪魁祸首,
memcpy(pyld, &datagram[12], bytes);
打印此行之前字节
的值。
关于c++ - 存储 char* 会在某个地方被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23532211/