两个策略的局部变量的内存碰撞
Memory Collision of Local Variables of Two Funcions
我有函数。功能和功能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);
在两个函数中。切记释放分配的内存。
相关文章:
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- C++在局部变量的内存上是否有上限
- 从函数返回变量地址时如何修复"与局部变量关联的堆栈内存地址"?
- 静态局部变量没有物理内存
- 为什么堆栈中的函数局部变量之间存在内存空间
- 局部变量保存相同的内存地址
- 两个策略的局部变量的内存碰撞
- 返回的与局部变量关联的堆栈内存的地址 (C++)
- 在范围内存在不可复制的局部变量时按值捕获
- 局部变量的内存地址根据 lambda 参数的预感而变化
- 为什么为堆栈中的局部变量分配的内存多于C++中所需的内存
- 需要释放具有保留内存的 c++ Do 局部变量
- 如何为局部变量分配内存
- 指针可以将局部变量的内存指向其范围之外?
- 为什么c++程序要为局部变量分配比在最坏情况下需要的更多的内存?
- 在c++中,通常在什么时候为局部变量分配内存?
- 局部变量在超出作用域时删除另一个变量的内存
- 是否可以在其范围之外访问局部变量的内存?
- c程序的内存布局,关于局部变量和全局变量的位置
- c++内存管理对局部变量的内存分配