[c++]読み取りアクセス違反がでました

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

[c++]読み取りアクセス違反がでました

#1

投稿記事 by ゆず茶 » 1ヶ月前

visual studio 2017 でC++でプログラミングをしています。
ライブラリはDXライブラリを導入しています。
クラスを作成し、コンストラクタを作っているのですが、ビルドが通ってもデバックで下記のエラーが発生して動きません。

「により 例外がスローされました:読み取りアクセス違反。
**kisetu** が 0x1110112 でした。 が発生しました」

コード:

const int KISETU = 8;
class Item {	
private:
	int itemIndex;	// アイテム番号
	string itemName;	// アイテム名
	int kaine;	// 買値
	int urine;	// 売値
	string itemSetumei;	// 説明文
	bool itemKisetu[KISETU];	// 季節
public:
	// コンストラクタ
	Item(int ind = 0, string iname = "", int kai = 0, int uri = 0,
		 string isetu = "", bool kisetu[KISETU] = { 0 }) {
		itemIndex = ind;
		itemName = iname;
		kaine = kai;
		urine = uri;
		itemSetumei = isetu;
		for (i = 0; i < KISETU; i++) {
			itemKisetu[i] = kisetu[i];
		}
	}
};

Item item = Item();
for文内のkisetuで例外が発生しているところまでは分かったのですが、修正のしかたがわかりません。
よろしくお願いします。

かずま

Re: [c++]読み取りアクセス違反がでました

#2

投稿記事 by かずま » 1ヶ月前

引数に配列の宣言を書いても、それはポインタとして扱われます。
bool kisetu[KISETU] = { NULL } は
bool *kisetu = nullptr と同じです。

呼び出し側で、配列の先頭アドレスをきちんと渡さないとエラーになります。
ゆず茶 さんが書きました:
1ヶ月前
for文内のkisetuで例外が発生しているところまでは分かったのですが、修正のしかたがわかりません。

コード:

		for (int i = 0; i < KISETU; i++)
			itemKisetu[i] = kisetu ? kisetu[i] : false;

ゆず茶
記事: 2
登録日時: 1ヶ月前

Re: [c++]読み取りアクセス違反がでました

#3

投稿記事 by ゆず茶 » 1ヶ月前

解決しました!
ありがとうございます。

返信

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