アサートが落ちる?

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

アサートが落ちる?

#1

投稿記事 by Qloeh » 10年前

毎度毎度すみません。テキストに従ってマップを読み込むプログラムを書いてみたのですが、fopenとfscanfでC4996エラーが出ます。fopen_sとfscanf_sにすると、Assertion Failed!という警告が出て、プログラムが終了されます。ただし、ビルドには成功しているようなのです。
ソースコードは下の通りです。

コード:

void fileload(void){
	int f, g, h;
	LoadDivGraph("マップチップ", 4, 4, 1, 32, 32, mapchip[0]);
	LoadDivGraph("マップチップその2",192,16,12,32,32,mapchip[1]);
	LoadDivGraph("CharaChip1", 12, 3, 4, 32, 32, charachip);
	LoadDivGraph("CharaChip2", 12, 3, 4, 32, 32, charachip2);
	FILE*fp;
	if ((fopen_s(&fp,"map.txt", "r")) == NULL)
		printf("ファイルをオープンできません\n");
	else{
		f = 0;
		g = 0; while (fscanf(fp, "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", &map[f][g][0], &map[f][g][1],
			&map[f][g][2], &map[f][g][3], &map[f][g][4], &map[f][g][5], &map[f][g][6], &map[f][g][7], &map[f][g][8],
			&map[f][g][9], &map[f][g][10], &map[f][g][11], &map[f][g][12], &map[f][g][13], &map[f][g][14], &map[f][g][15],
			&map[f][g][16], &map[f][g][17], &map[f][g][18], &map[f][g][19]) == 20){
			g++;
			if (g == 15){
				f = f + 1;
				g = 0;
			}
		}
		fclose(fp);
	}
fscanf_sを使用した場合のメッセージがこちらです。

Microsoft Visual C++ Runtime Library

Debug Assertion Failed!

Program:...cuments\VisualStudio2013\Project\DXAPPLY.exe
File:f\\dd\vctools\crt\crtw32\studio\fscanf.c
Line:52

Expression:(stream!=NULL)

For infomation on how your program can cause an assertion failure,
see the Visual C++ documentation on asserts.

因みに、私が使っているのは2013ですが、参考書は2010 のようです。
プログラムの破損とかでしたら怖いので、良ければ解答をお願いします

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

Re: アサートが落ちる?

#2

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

Qloeh さんが書きました:

コード:

	if ((fopen_s(&fp,"map.txt", "r")) == NULL)
		printf("ファイルをオープンできません\n");
	else{
この部分が間違っています。
fopen_sの戻り値は正常終了のとき0、エラーのときエラーコードのはずなので、
戻り値がNULL(多くの処理系で0に変換可能?)のときではなく、0ではない(=真)のとき、かつその時に限り「ファイルをオープンできません」という判定にしないといけません。

fopen_s、_wfopen_s
戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。 これらのエラー コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Qloeh
記事: 35
登録日時: 10年前

Re: アサートが落ちる?

#3

投稿記事 by Qloeh » 10年前

有難う御座います。条件を変えてビルドするとエラーがでなくなりましたが、
今度はプログラムが応答しなくなりましたね。C4996の警告を無効化していたので、何か不味かったでしょうか

閉鎖

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