![](/img/trans.png)
[英]C++ Win32 application continuously crashes when working with static text control. Can't figure out why
[英]Can't figure out why the code crashes in C++
當我嘗試運行代碼時,編譯器崩潰,但我找不到問題。
我收到此錯誤: 0xC0000005: Access violation reading location 0x00000000
。 因此,它一定是指針錯誤。
但是我似乎無法弄清楚我做錯了什么。 因此,如果有人可以幫助我,將不勝感激。
classB.ccp
ClassB::ClassB(ClassC *CPtr, int x)
{
ClassC *CPtr_ = CPtr;
x_ = x;
}
void ClassB::print() const
{
CPtr_->print();
std::cout << x_ << std::endl;
}
ClassC.ccp
ClassC::ClassC(int y)
{
y_ = y;
}
void ClassC::print() const
{
std::cout << y_ << std::endl;
}
主要
ClassC myCObject(7);
ClassB myBObject(&myCObject , 11);
myBObject.print();
在類ClassB
的構造函數中,您將參數值CPtr
存儲在局部變量 CPtr_
。 你為什么這么做?
顯然,該想法是將數據存儲在ClassB
的數據成員CPtr_
中。 但是,由於某些無法解釋的原因,您決定在構造函數中聲明一個具有相同名稱的局部變量。 由於存在該額外變量,數據成員將保持未初始化狀態(包含垃圾),並且在嘗試取消引用它時代碼崩潰。
在此, CPtr_
是局部變量。 我想您想將CPtr
存儲在ClassB
的屬性中。 也許有一個,而局部變量遮蓋了它。
ClassB::ClassB(ClassC *CPtr, int x)
{
ClassC *CPtr_ = CPtr;
x_ = x;
}
ClassB::ClassB(ClassC *CPtr, int x)
{
ClassC *CPtr_ = CPtr;
x_ = x;
}
當您調用構造函數時,您正在創建一個ClassC指針,但是當構造函數結束時,該指針被破壞了,因為它是一個局部變量
添加您的
ClassC *CPtr_;
var到您的類的定義,那么,構造函數必須看起來像
ClassB::ClassB(ClassC *CPtr, int x)
{
CPtr_ = CPtr;
x_ = x;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.