#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」の2つのオブジェクトがあります。 プライベート変数のポインタを返すのは初めてでは問題ありませんが、2回目に呼び出されたときにsegフォルトが発生します。それはなぜそうですか?C++では、異なるオブジェクトのプライベート変数のポインタを返すと、セグメンテーションフォルトが発生するのはなぜですか?
私は2番目の呼び出しをコメントアウトし、新しいオブジェクトの作成を試み、プライベート変数のポインタを返そうとしました。 「g」はクラスCの別のオブジェクトですが、それを返すとセグメンテーション違反になります。それはなぜそうですか?
'C(int&i){* o = i;}'これは、初期化されていないポインタを逆参照することによって、未定義の動作を示します。あなたは 'o =&i;'を意味するかもしれません。 [デモ](http://rextester.com/CINTK58780) –
ありがとう、それは動作します! – Harikrishnan