类函数和成员变量踩踏内存
Class function and member variable stomping memory
我正在为iOS和Android的应用程序工作,我在我的c++代码中得到非常不同的结果。我遇到的问题是,进入一个函数是践踏成员变量是一个派生类。例如
int main()
{
A** arrayOfA = new A[10];
for (int i = 0; i < 10; ++i)
{
arrayOfA[i] = new D();
}
return 0;
};
class A
{
// Original code here. After this is the added function and member variable that breaks it
public:
virtual u32 GetterFunction() = 0;
protected:
u32 ProblemVariable;
};
class B : A
{
public:
B(u32 index) { ProblemVariable = index }
virtual u32 StompedGetter() = 0;
virtual u32 GetterFunction() { return ProblemVariable; }
void Initialize()
{
u32 sometimesBunkNumber = StompedGetter();
}
protected:
u32 StompedVariable;
};
class C : A
{
public:
virtual u32 GetterFunction() { return 0; }
};
class D : B
{
B() { Initialize(); }
virtual StompedGetter() { return StompedVariable; }
}
class E : B
{
virtual StompedGetter() { return 0; }
}
现在,这里的问题是,一切工作正常,直到我把成员变量和虚拟getter在类a中。当getter被调用时,它会随机给出一个床位号。它可能会工作2次,然后它会返回一个错误的数字(显然是从内存中的错误位置抓取)。函数是否是虚函数并不重要,但它是理想的解。最糟糕的是,这在iOS版本上运行良好,但在Android上却无法运行。只是作为一个澄清,它运行,直到它初始化类a的数组类B抱歉,如果这是非常模糊的,但任何和所有的帮助是赞赏的。提前感谢!
根据您所展示的代码,我唯一能想到的是
这一行A** arrayOfA = new A[10];
应该改成
A** arrayOfA = new A*[10];
您描述的症状似乎表明您正在执行某种内存侵犯,并且将指向指向A的指针的指针数组处理为A的数组,然后通过对它们赋值D来访问这些A,可能会导致这种情况。在添加成员变量之前,它可能工作得很好,因为之前它只是一个空结构体(地址的大小)。现在sizeof(A) != sizeof(A*),你已经占用了你所有的内存
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么内存屏障依赖于变量?
- 在内存不足之前,我可以声明多少个 const 变量?
- C++具有模板成员变量的类. 和参数内存输出
- 为什么同一个变量的内存地址不同?
- 分配具有 2D 向量大小的变量的内存
- C++强制变量到一个固定的内存位置
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- C++在变量的内存地址上做什么来"deallocate"它?
- 如果不分配内存,我如何能够为变量创建和分配值?
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 函数,返回变量c++占用的内存位置的大小
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 指向动态内存中结构中的变量时出现问题
- C++函数在endl(内存变量?
- 控制内存变量
- 使用内存变量初始化填充位结构体