两个函数局部变量的记忆碰撞

时间:2016-06-20 10:21:31

标签: c++ memory

我有功能。 FunctionA和FunctionB。

A00,A01
A10,A11
A20,A21

现在在main中,我正在创建一个连续调用functionA和functionB的线程函数。

但是,有时functionA out缓冲区正在获取,同时读取functionB out缓冲区。

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

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

2 个答案:

答案 0 :(得分:1)

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

我强烈建议用科学记数法写这样的数字,比如

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

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

以避免将来出现此类错误。

答案 1 :(得分:0)

正如@RevolverOcelot所指出,请提供MWE。 此外,两个'm'指针都未初始化。 保留正确大小的内存,然后使用memcpy。

例如:

char *m = new char[600000];

...

memcpy(out, m, 6000000);

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