我有功能。 FunctionA和FunctionB。
A00,A01
A10,A11
A20,A21
现在在main中,我正在创建一个连续调用functionA和functionB的线程函数。
但是,有时functionA out缓冲区正在获取,同时读取functionB out缓冲区。
但是,当我将这两个缓冲区移动为类的成员变量时,则没有内存冲突问题。
为什么在第一种情况下发生了? 我做错了什么错?
答案 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);
在两个函数中。 记得释放分配的内存。