无法弄清楚为什么代码崩溃C++
Can't figure out why the code crashes in C++
当我试图运行代码但找不到问题时,编译器会崩溃。
我得到这个错误: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;
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃