c++ - C++中,为什么返回不同对象私有(private)变量的指针会导致段错误?

标签 c++ pointers object segmentation-fault

#include <iostream>

class C
{
    private:
        int *o;
    public:
        C(int &i) { *o = i;}
        int* get_val() {return o;}
};

int main()
{
    int t = 9;
    C c(t);
    int* p = c.get_val();
    std::cout<<*p<<std::endl;
    int* h = c.get_val();           //seg fault
    std::cout<<*h<<std::endl;

    int f = 25;
    C g(f);
    int* q = g.get_val();           //seg fault
    std::cout<<*q<<std::endl;        

    return 0;
} 

类 C 有两个对象:“c”和“g”。 返回私有(private)变量的指针第一次工作正常,但第二次调用时会导致段错误。为什么会这样?

因此,我注释掉了第二个调用并尝试创建一个新对象并尝试返回私有(private)变量的指针。即使“g”是 C 类的另一个对象,返回它也会导致段错误。为什么会这样?

最佳答案

构造函数 C::C(int) 没有初始化成员变量 o。它尝试通过 *o=i 写入指针 o,但由于 o 未初始化,因此结果不可预测。

关于c++ - C++中,为什么返回不同对象私有(private)变量的指针会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700748/

相关文章:

PHP RecursiveIteratorIterator - 反向计算结果

c++ - 在 C++ 中,对象和指向对象的指针有什么区别?

java - Pollard rho 整数分解

c++ - 为什么我不能获取存储单元 n 中的内容?

javascript - 当对象键存在于javascript中另一个对象的数组中时重构对象数据

javascript - 如何使用for/in循环遍历js中的对象?

C++ 无法在单独函数中的变量之间建立通信

c# - 为网站添加滑动音效

c - 给定一个二维数组——我想使用原始数组中的值创建一个新数组

C - 带指针的函数的段错误