ページ 11

CX000069:スタックフレームが必要です…?

Posted: 2010年3月14日(日) 14:47
by Yuno
こんにちはYunoです
今変数に値がきちんと代入されないという問題で悩んでいます

この前、不運にもデータが飛んでコードを書き直したのですが
その時にDxLibを
http://homepage2.nifty.com/natupaji/DxL ... VCTest.exe
のものに変えたところ
以下の関数で
char *pathに値が代入されないということが発生しました

調べると
CXX000069変数にはスタックフレームが必要です
と出て3行目のあたりで値が0x00000000となったので
いろいろ調べてみたのですが…

スタックフレームでググっても
そのようなものが見つかりません
どのようにすれば直るかどなたかわかる方いませんか?


以下がそのコードです
一応
file_load(構造体)
>int buf
>int fsize

void DxAPath(char* path){
SetUseDXArchiveFlag(TRUE);
SetDXArchiveExtension("dat");
SetDXArchiveKeyString(key);
file_load.fsize = FileRead_size(path);
if(file_load.fsize<=0){
FILE *fp=fopen("\\e_log.txt","wb");
fwrite(path,sizeof(char),strlen(path),fp);
fclose(fp);
DxLib_End();
}
file_load.buf = (int *)malloc((file_load.fsize+1)*sizeof(int));
int fhandle = FileRead_open(path);
FileRead_read(file_load.buf,file_load.fsize,fhandle);
FileRead_close(fhandle);
SetUseDXArchiveFlag(FALSE);
}

Re:CX000069:スタックフレームが必要です…?

Posted: 2010年3月14日(日) 14:54
by Yuno
すんませんタイトルおかしかったです
CXX0069でしたorz

Re:CX000069:スタックフレームが必要です…?

Posted: 2010年3月14日(日) 17:27
by Justy
 テスト版のようですから何が起きても不思議はないと思いますが。

 ということはその DxAPath関数は(ファイルが開けない等)正常に動作していないということですか?
 呼び出し元はどうなっているのですか?

Re:CX000069:スタックフレームが必要です…?

Posted: 2010年3月14日(日) 21:43
by Yuno
先ほど最新版のものに変えて試しましたがやはりだめでした

確かにファイルは一つも開けていません…
要するにpathが空っぽなので
File_Read_sizeが0
File_Read_openは-1以下になります

呼び出し元はすべて
DxAPath("./アーカイブ名/aaa/bbb.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/aaa/bbb.gph");<-復号化関数
DxAPath("./アーカイブ名/ccc/ddd.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/ccc/ddd.gph");
:
:
という感じです

Re:CX000069:スタックフレームが必要です…?

Posted: 2010年3月15日(月) 00:14
by Justy
>pathが空っぽなので
 それをどこで確認していますか?
 もし、ウォッチウインドウなどでしたら、それは信用できないかもしれません。

 FileRead_sizeの前に
DxLib::AppLogAdd("%s\n", path);
を呼んで、正しく pathがセットされているかログやデバッガの出力ウインドウから確認してみてください。

 これがうまくいっていないようですと、スタックが破壊されている可能性があります。
 この場合はこのソース以外のどこかに問題があるので、プロジェクト一式がないと
原因などはわかりません。


 反対にこれがうまく表示されたのであれば、path変数に正しく値はセットされていることに
なります。
 pathが正しいのに開けない、ということはアーカイブの中に対象のファイルが入っていない、
或いはパスが間違っているのかもしれません。

 アーカイブをデコードしてみて入っているかどうか、指定しているパスが正しいかどうか
確認してみてください。


 それでも判らなければ、再現可能なプロジェクト一式をどこかにアップしてもらうしか
ないかと。