无法弄清楚为什么代码崩溃C++

Can't figure out why the code crashes in C++

本文关键字:崩溃 C++ 代码 为什么 弄清楚      更新时间:2023-10-16

当我试图运行代码但找不到问题时,编译器会崩溃。

我得到这个错误:0xC0000005: Access violation reading location 0x00000000。所以它一定是一个指针错误。

但我似乎不明白自己做错了什么。因此,如果有人能帮助我,我将不胜感激。

B类.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;
}

main

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;
}