我有函数。功能和功能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);
在两个函数中。切记释放分配的内存。