【问题标题】:Pointer object Creates a windows error in Visual C++ 6.0指针对象在 Visual C++ 6.0 中创建 windows 错误
【发布时间】:2023-03-14 21:51:01
【问题描述】:

我将粘贴一个代码sn-p并解释我面临的问题,

void materialPropertiesDlg::OnNext() {
    contiBeam *continousBeamPtr;
    contiBeam contiBeamObj;
    UpdateData(TRUE);
    switch (m_steel_grade) {
        // Do Something
    }   
    continousBeamPtr->setMaterial(m_conc_grade, m_steel_grade);
    OnOK();
}

如您所见,在第 2 行创建了一个指针对象,在下一行创建了一个对象。所以,然后我调用类contiBeam的成员函数setMaterials()。我可以使用对象contiBeamObj 轻松做到这一点,但是当我使用contiBeamPointer 调用该函数时,Windows 会抛出一个错误,显示为

应用程序已停止工作。

我能够做必要的事情,我只是想知道这可能是什么原因?

【问题讨论】:

    标签: windows visual-c++-6


    【解决方案1】:

    您正在使用您的指针contiBeam *continousBeamPtr; 而没有分配它。

    那是未定义的行为,会使您的应用程序崩溃。

    您应该使用new 分配(保留内存)您的指针,如下所示:

     contiBeam *continousBeamPtr = new contiBeam;
    

    然而,最终的问题是,为什么你首先要使用指针?你需要一个吗?从您发布的代码看起来不像。

    【讨论】:

    • 实际上,我是 Visual C++ 和编程的新手,我通过尝试不同的东西来学习。另外,我想知道使用new 有什么帮助?它的作用是什么?
    • 您提供的解决方案不起作用,起作用的语句是contiBeam *continousBeamPtr = new contiBeam;
    • @vin 对不起,我的错误。它确实应该是new 之后的类型。 new 为堆上的对象分配内存并返回指向该内存的指针。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多