c++ - 从类调用函数时箭头 '->' 分隔符崩溃

标签 c++ pointers c++11 function-pointers

我正在为一个类项目工作,我正在使用类和类类型的指针来调用类中的一些函数,但它在代码块和 Eclipse 上崩溃,我不知道发生了什么 请注意,当用 y 分配 x 时它会崩溃

#include <iostream>

using namespace std;

class a{
private:
    int x;
public:
    void set_X(int y){
        x=y;
    }
};

int main()
{
    a *Ptr;
    Ptr->set_X(5);
}

最佳答案

a *Ptr;
Ptr->set_X(5);

您的 Ptr 没有指向任何东西。尝试在未初始化的指针上调用成员函数会导致未定义的行为。崩溃只是可能发生的许多或多或少的随机事件之一。

幸运的是,在您的示例中,您根本不需要指针。你可以简单地写:

a my_a;
my_a.set_X(5);

指针通常指向动态分配的对象。如果这是您想要的,您必须相应地使用 newdelete:

a *Ptr = new a;
Ptr->set_X(5);
delete Ptr;

在现代 C++ 中,std::unique_ptr 通常是更好的选择,因为您不必手动释放分配的内存,这消除了许多潜在的编程错误:

auto Ptr = std::make_unique<a>();
Ptr->set_X(5);
// no delete necessary

关于c++ - 从类调用函数时箭头 '->' 分隔符崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34543938/

相关文章:

c++ - 新建桌面收不到键盘事件

java - 需要像指向 JTable (Java) 的指针之类的东西

c++ - 打印未初始化的引用给出 1. 为什么?

c++ - typedef中synonym的含义

c++ - 非类型模板参数可以是 "void*"类型吗?

c++ - 鱼眼畸变校正

c++ - 如何指定 vc11 lambda 调用约定

c++ - C/C++ 读取具有多个字符串和字符的二进制文件

c++ - 返回指向动态数组中最年轻学生的指针

c++ - 将 unique_ptr 传递给 strtok