我想转换我的STRUCT以尊重以下方法:
但我在跑步时遇到了这些错误:
这是我的代码:
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));
}
你能不能帮我找到运行时出现这个问题的原因。
答案 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
循环相同。