なんだかよく分からない現象が起きてしまいました。。。
ファイルをbload命令で読み込んだときに、なぜか文字列長がバッファサイズを超えてしまい、
バッファオーバーフローが発生してしまいます。
1時間以上、試行錯誤してみたのですが、原因が全く分かりません。
おまけに、「strlenかvarsizeを実行しないとオーバーフローしない」という意味が分からない現象も起きてしまい、
ますます、訳が分からない状態になってしました。
どなたか、原因が分かる方、なぜこんなことが起きるのか教えてください。
※以下がそのスクリプトです。
// ファイルの内容 66バイト(buf自体は64バイトだが、改行がつくので66) // なぜか64バイト以上でないと起きない(64バイトきっちりだと、1回目でオーバーフロー, 65バイト以上は4回目?) buf = {" test text test text test text test text test text test text "} notesel buf notesave "test.txt" // 読み込むファイル loadFilePath = "test.txt" sdim sFile index = 0 repeat 4 // バッファ確保 exist loadFilePath loadSize = strsize if loadSize==-1: dialog"ファイルがない": end sdim sFile_temp, loadSize; + 1 // +1するとなぜかオーバーしない // ファイル読み込み bload loadFilePath, sFile_temp // ★オーバーフローするとき、なぜか文字列長がバッファサイズを超えている // (これのせいで、バッファ拡張に使っているloadSizeと、必要サイズがずれてしまい、オーバーフローしてしまう) // なぜか、ここをコメントアウトする(strlenかvarsizeを実行しない)とオーバーしない mes "strlen:"+strlen(sFile_temp)+" varsize:"+varsize(sFile_temp) logmes sFile_temp // デバッグウィンドウのログを見ると分かるが、オーバー時に、最後辺りが文字化けしている(しかも文字化けした文字はランダム) logmes "---" // バッファ拡張 memexpand sFile, strlen(sFile) + loadSize + 1 mes "確保済み:"+varsize(sFile)+" 必要サイズ:"+str(index+strlen(sFile_temp)) // sFileに追加 poke sFile, index, sFile_temp index += strsize mes loop mes "end"