ハンドルが変な値を叩き出してしまいます・・・

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

ハンドルが変な値を叩き出してしまいます・・・

#1

投稿記事 by ochaduke » 7年前

こんばんは。また皆様のお力を拝借させてください

現在、dxlibを用いて、音響用ソフト(少し説明すると、文化祭で劇をやるのですが、その音響に使用するソフトです。)を製作中です。
それが、完成間近!ってところまできて、思いもよらないことが起きてしまいました。
「音響ソフトなのに楽曲が読み込めない!」
色々実験していくうちに、サウンドハンドルの値が変な値を示しているのに気が付きました。その値が、決まって、-842150451なんです。
(-1ならエラーだと割り切れるのに・・・)

まず、なぜこんな数字が(どこから)出てきたのかがわからないです。
そして、どうやったらしっかり読み込めるようになるのかが一番の懸念です。

文化祭が明後日からなので、とても焦っていて混乱しています。どなたか、お力を貸していただけないでしょうか。


以下、該当部分のコードと説明になります。

コード:

int LOAD::LoadSound(int* sound_h){
	string filepath = ".\\sounds\\";
	string* fullpath;
	bool issamename = false;
	HANDLE hFind;
	WIN32_FIND_DATA fd;
	
	
	//-----Get handles-----//
	fullpath = new string[dates_counter];
	/*Make fullpath*/
	for (int i = 0; i < dates_counter; i++) {
		fullpath[i] = filepath + name_r[i];
	}

	for (int i = 0; i < dates_counter; i++) {

		/*前に重複するファイル名はあるか調べる*/
		for (int j = i - 1; j >= 0; j--) {
			if (fullpath[i] == fullpath[j]) {
				sound_h[i] = sound_h[j];
				issamename = true;
				break;
			}
		}
		/*重複していなければ新たにハンドルを確保*/
		if (!issamename) {
			sound_h[i] = LoadSoundMem(fullpath[i].c_str());
		}

		/*エラーチェック*/
		hFind = FindFirstFile(fullpath[i].c_str(), &fd);
		if (sound_h[i] <= -1 || hFind == INVALID_HANDLE_VALUE) {
			errornum.push_back(i);
			//found an error in loading
			loadstatus = -2;
		}
		FindClose(hFind);

	}


	/*completed*/
	loadstatus = 2;
	/*確認用*/
	for (int i = 0; i < dates_counter; i++)
	{
		DrawFormatString(0, i * 20, GetColor(255, 0, 0), "%d", sound_h[i]);
		ScreenFlip();
	}
	WaitKey();

	return errornum.size();
	
}

(説明)
・このコードは、テキストファイルに書かれた曲名(正しく取得済み)からサウンドハンドルを作成することを意図しています。
・string *name_rはテキストファイルから読み込まれた曲名を格納しています。
・issameは曲名に重複がないかを確かめるためです。
・dates_counterは、name_rの要素数に等しい値です。
・loadstatusは、ロードの状況を表します。
・高速性を求めているので、一挙にメモリに展開しています。
ただ、ファイルのサイズも小さいので、メモリが足りないことはないかと(そもそも、足りないなら-1を示すはず・・・)

・コードをここに全部貼ると冗長になると思われたので、必要と感じる部分だけ掲載しました。コード全体やソフト本体等のファイルが必要な場合は、お手数ですが下のリンクからご利用ください。
https://1drv.ms/f/s!Agx035BMTwPAryCvPScmORCwlPIO
(内容物:ソフト本体、全コード、使用楽曲、取説、その他必要なファイル)

・環境はwin10、dxlibです。



繰り返しになりますが、楽曲が読み込めない状態を改善できるよう、どうか助けてください。お願いします。
急いでおりまして、情報が足りなかったり、いきなり不躾な文となっていしまいましたが、ご容赦ください。
また、不足があれば教えていただけると幸いです。

ここからは私事ですが、明日はスマホからしかここにアクセスできないので、返信が遅れがちになるかもしれません。(ただ、パソコン自体は、オフラインですが、使えるので(多分)、ご教授いただければ、それを試すことはできます。)
急いでいると言っておきながら、申し訳ありません。


よろしくお願いします。
電車グ人生…

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: ハンドルが変な値を叩き出してしまいます・・・

#2

投稿記事 by YuO » 7年前

-842150451と書くと何のことやら,ですが,0xCDCDCDCDと書くと,未初期化変数の類であることが想像つきます。
代入しているはずの部分を確実に通っていることや,変数のスコープを間違えていないことなどを確認してみてはどうでしょうか。

ochaduke
記事: 36
登録日時: 8年前

Re: ハンドルが変な値を叩き出してしまいます・・・

#3

投稿記事 by ochaduke » 7年前

YuOさん、返信ありがとうございます。

なるほど、-842150451とはそういうことだったんですね。
確かに、例えば、配列のうちの最初の10個のハンドルはちゃんとした数なのに、11個目以降はずっと-842150451なので、ご指摘されたことが原因である可能性も高いのかな、と思いました。

ご指摘いただいた通り確認してみます。
電車グ人生…

ochaduke
記事: 36
登録日時: 8年前

Re: ハンドルが変な値を叩き出してしまいます・・・

#4

投稿記事 by ochaduke » 7年前

今確認したら、issamenameフラグを降ろす処理をすっ飛ばしていたことに気づきました!
だから、未代入の状況が生まれていました

本当にありがとうございますm(_ _)m
電車グ人生…

閉鎖

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