指针对象在 Visual C++ 6.0 中创建 windows 错误

Posted

技术标签:

【中文标题】指针对象在 Visual C++ 6.0 中创建 windows 错误【英文标题】:Pointer object Creates a windows error in Visual C++ 6.0 【发布时间】:2012-09-10 12:56:47 【问题描述】:

我将粘贴一个代码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 会抛出一个错误,显示为

应用程序已停止工作。

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

【问题讨论】:

【参考方案1】:

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

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

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

 contiBeam *continousBeamPtr = new contiBeam;

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

【讨论】:

实际上,我是 Visual C++ 和编程的新手,我通过尝试不同的东西来学习。另外,我想知道使用new 有什么帮助?它的作用是什么? 您提供的解决方案不起作用,起作用的语句是contiBeam *continousBeamPtr = new contiBeam; @vin 对不起,我的错误。它确实应该是new 之后的类型。 new 为堆上的对象分配内存并返回指向该内存的指针。

以上是关于指针对象在 Visual C++ 6.0 中创建 windows 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ActiveX dll 项目中创建列表(对象),在 Visual Basic 6.0 中用于 c# 项目

如何在visual studio2008中创建,编译和运行C++程序,

在 C++ 中创建对象并将指针传递给 python

如何在 Visual Basic 6.0 中创建带有文本框的数组

如何在 C++ 中的子类中创建父对象数组?

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目