c++ - 存储 char* 会在某个地方被破坏

标签 c++ crash memcpy

我有以下事件序列:

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/

相关文章:

c++ - 从带有文本的字符串中提取 double

c++ - 如果调试运行正常但发布崩溃怎么办

crash - NSMutableRLEArray 中的 iOS11 崩溃 replaceObjectsInRange:withObject:length::Out of bounds

通过 memcpy 复制数组

c++ - 在内存中设置的二维数组是否与模拟二维数组的一维数组连续相似?

c++ - 基类的派生类充当抽象类

c++ - 使用带有接口(interface)和新语法的 Qt 连接时出错

c++ - 在哪里可以找到可以打开常见 3D 文件格式的 C++ 3D 建模库?

crash - Swift 3 - 自定义 segue 因 UIStoryboardSegueTemplate.m :85 而崩溃

C: 带有 void* 指针的 memcpy 段错误