在我的案例中如何检测堆损坏

时间:2014-10-16 11:03:15

标签: c++ visual-c++ heap heap-memory

我想转换我的STRUCT以尊重以下方法:

  • 将STRUCT转换为char数组。
  • 将char表转换为int数组。
  • 将int数组转换为char数组。
  • 将char数组转换为STRUCT。

但我在跑步时遇到了这些错误: enter image description here enter image description here

这是我的代码:

void rServer::convertStruct_to_char ( PCryptDATA p) {

    // ***********convert struct to Array of char ************
    char* frame= new char[p.size];
    cout << p.size <<endl;
    cout << endl;   
    memcpy(frame, &p, sizeof(p));


    //***********convert Array of char to array of int  ************
    int taille= p.size;
    int* out = new int[taille]; 
    for (int i=0; i<taille+1;i++) 
    {
        out[i]=frame[i];
    }

    delete [] frame;

    //***********convert Array of int to Array of char ************
    char* int2char = new char[taille];
    for (int i=0; i<taille+1;i++)
    {
        int2char[i]=out[i];
    }

    //delete [] int2char;

    //***********convert Array of char to STRUCT ************
    PCryptDATA t; //Re-make the struct
    memcpy(&t, int2char, sizeof(t));
}

你能不能帮我找到运行时出现这个问题的原因。

1 个答案:

答案 0 :(得分:0)

int* out = new int[taille]; 
for (int i=0; i<taille+1;i++) 
    out[i]=...

很糟糕 - 在循环的最后一次迭代中,您为out[taille]分配了一个值,但out数组是为从taille trough {{0索引的taille-1元素分配的1}}。结果你写了经过分配的块并覆盖了堆的其他一些块,从而破坏了它。

应该是:

int* out = new int[taille]; 
for (int i=0; i<taille;i++) 
    out[i]=...

其他for循环相同。