Singletonクラスのメンバ関数でアクセス違反が・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
seisuu_ryokutya
記事: 2
登録日時: 9年前

Singletonクラスのメンバ関数でアクセス違反が・・・

#1

投稿記事 by seisuu_ryokutya » 9年前

はじめまして。C++で質問があります。
こういった場での質問は不慣れなものでお見苦しい点があればご容赦下さい。

以下のようなソースコードを書いて実行したら 
void Singleton::Set_num(int set_num)のnum = set_num;の部分で
0xC0000005: 場所 0x00000000 への書き込み中にアクセス違反が発生しました。というエラーが出ました。

どうしたらSingletonクラスのメンバ変数numをメンバ関数を用いて設定、取得できるようになるのでしょうか?

コード:

#include <stdio.h>

class Singleton
{
private:
	int num;
	static Singleton* singleton;

private:
	Singleton(){};

public:
	static Singleton* GetInstance(){ return singleton; }

	int Get_num();
	void Set_num(int);

};

Singleton* Singleton::singleton;


int Singleton::Get_num()
{
	return num;
}
void Singleton::Set_num(int set_num)
{
	num = set_num;
}


int main(void)
{
	Singleton* hoge = Singleton::GetInstance();
	hoge->Set_num(60);
	
	printf("hoge->num  %d\n", hoge->Get_num());
	
	getchar();
	return 0;
}
あまり、C++に関して詳しくはないので、具体的なソースコードで回答していただければ助かります。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: Singletonクラスのメンバ関数でアクセス違反が・・・

#2

投稿記事 by みけCAT » 9年前

変数を作るだけでなく、インスタンスを入れておかなければいけません。

コード:

Singleton* Singleton::singleton;

コード:

Singleton* Singleton::singleton = new Singleton();
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: Singletonクラスのメンバ関数でアクセス違反が・・・

#3

投稿記事 by みけCAT » 9年前

さっきのコードだとnewしたオブジェクトがdeleteされず気持ち悪いので、静的ローカル変数を使った方がいいかもしれません。

コード:

#include <stdio.h>

class Singleton
{
private:
	int num;

private:
	Singleton(){}

public:
	static Singleton* GetInstance(){
		static Singleton singleton;
		return &singleton;
	}

	int Get_num();
	void Set_num(int);

};

int Singleton::Get_num()
{
	return num;
}
void Singleton::Set_num(int set_num)
{
	num = set_num;
}

int main(void)
{
	Singleton* hoge = Singleton::GetInstance();
	hoge->Set_num(60);
	
	printf("hoge->num  %d\n", hoge->Get_num());
	
	getchar();
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

seisuu_ryokutya
記事: 2
登録日時: 9年前

Re: Singletonクラスのメンバ関数でアクセス違反が・・・

#4

投稿記事 by seisuu_ryokutya » 9年前

みけCATさん、ありがとうございました。
これで、今、書いているプログラムの続きを書くとこができます。
また何か、解らないことがあった時はこの掲示板にお世話になるかもしれません。
その時はよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る