两个策略的局部变量的内存碰撞

Memory Collision of Local Variables of Two Funcions

本文关键字:局部变量 内存 碰撞 策略 两个      更新时间:2023-10-16

我有函数。功能和功能b。

in FunctionA
{
   char *m;  //Pointed to Shared Memory A
   char outa[600000]
   //Coping the Data into another character array
   memcpy(out, m, 6000000);
   // Now Processing this Data,
   // After Processing I am storing this data.
}
in FunctionB
{
   char *m;  //Pointed to Shared Memory B
   char outb[600000]
   //Coping the Data into another character array
   memcpy(out, m, 6000000);
   // Now Processing this Data,
   // After Processing I am storing this data.
}

现在,我正在创建一个线程函数,该函数连续调用functiona和functionb,一个接一个。

但是,有时会在读取功能的同时获得功能A的缓冲区。

但是,当我将这两个缓冲区作为类的成员变量移动时,内存相撞就没有问题。

为什么在第一种情况下发生?我做了什么?

您声明了600.000字节的数组(char = 1个字节),然后复制了6.000.000字节。我认为这引起了混乱。

我强烈建议用科学符号撰写这样的数字,例如

char test[long(6e6)];
memcpy(.. , .., long(6e6));

char test[long(6e6)];
memcpy(.. , .., sizeof(test));

以后避免此类错误。

@revolverocelot指出,请提供MWE。而且,两个" M"指针都是非专业化的。保留正确尺寸的内存,然后使用memcpy。

例如:

char *m = new char[600000];

...

memcpy(out, m, 6000000);

在两个函数中。切记释放分配的内存。