[英]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時,它會在隨機時間給出一個下鋪號。 它可能會工作兩次,然后返回一個錯誤的數字(顯然是從內存中的錯誤位置抓取的)。 函數是否為虛擬函數無關緊要,但這是理想的解決方案。 最糟糕的是,它可以在iOS版本上編譯並運行良好,但在Android上卻死了。 就像澄清一樣,它一直運行到在類A的數組中初始化類B為止。很抱歉,如果這很含糊,不勝感激。 提前致謝!
鑒於您所顯示的代碼,我唯一能想到的就是該行
A** arrayOfA = new A[10];
相反應該是
A** arrayOfA = new A*[10];
您描述的症狀似乎表明您正在執行某種內存沖突,並且將指向A的指針的數組視為A的數組,然后稍后通過為它們分配D來訪問這些A。 在添加成員變量之前,它可能工作得很好,因為之前它只是一個空結構(地址的大小。)現在,sizeof(A)!= sizeof(A *),您將遍歷整個內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.