簡體   English   中英

無法弄清楚為什么代碼在C ++中崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM