エラーで実行中落ちる

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: エラーで実行中落ちる

by 雷電 » 2007年4月21日(土) 22:07

まだAB5のβは安定してないみたいですね。
こっちの開発も、4.24に切り替えてやってみます。

今回はどうもありがとうございました。

by tak » 2007年4月21日(土) 16:55

Thread.abて、それAB5のβ版ではないですか?
すみません、こっちは4.24を前提に話をしていました。

ZeroString() はライブラリのバグとして、こちらで対処します。
4.24だと ZeroString() は問題なく使えます。

by 雷電 » 2007年4月21日(土) 12:04

wsprintf(buffer, "UnitSet%d", i)

この直前に一応ZeroString関数で25byte確保してデバッグしてみると、

Thread.abの140行目でアクセス違反が起こってしまいました。

Forの直前にするとまたもヒープエラーです。

どうしたものでしょう?

追記:

buffer[20] As Byte
で、代用したところ、
wsprintf(buffer, "UnitSet%d", i)
この直後でアクセス違反が起こります。

by tak » 2007年4月21日(土) 01:00

xss0423 さんが書きました:#console

Dim a As String
wsprintf(a,"UnitSet%d",5)

これを試しに実行したらヒープエラー吐きました
やっぱりbufferが原因のようです
こちらでも確認できましたが、確保されたサイズは (requested size of)5 バイトでした。
考えてみれば確かに 長さ情報 (4 bytes) + 終端ヌルキャラクタ で計算上は合うのですが、はて。

Byte 配列で代用するという手もありますが、AB5から文字型の扱いが拡張されることから、避けておいた方が無難です。
String 型のままバッファを拡げたい場合は ZeroString() が使えます。これも非公式関数なので怪しいところですが。

追記 2007/4/21 4:19
非公式とおもったら、ありました、ZeroString 関数

by xss0423 » 2007年4月21日(土) 00:11

#console

Dim a As String
wsprintf(a,"UnitSet%d",5)

これを試しに実行したらヒープエラー吐きました
やっぱりbufferが原因のようです

Dim buffer[15] As Byteに置き換えてみて下さい

by xss0423 » 2007年4月21日(土) 00:00

bufferが原因のような
String型は宣言された時点である程度メモリを確保してくれていますが、Forの下の操作で溢れていると思います

by 雷電 » 2007年4月20日(金) 22:16

オープンソースなのですが、最後の、End Subでエラーです。
hiraさんの、サンプルコードを使用させていただいています。(AddListItem,SetListItem)

おかしなコードを書いてしまっているでしょうか?

by tak » 2007年4月20日(金) 21:59

ヒープ領域を解放するときに安全性チェックが行われるのですが、そのテストで引っかかった可能性が高いです。

たとえば malloc() で 1 バイトのメモリ領域を確保したとします。
このとき &H01150DA8 に割と近い場所が確保できるはずです。
プログラムにバグがあり、誤って本来書き込んではいけない &H01150DB1 の値を書き換えたら、free() したときにこのような警告が発生します。

まずはそのような間違いのありそうな箇所を探してみてください。

エラーで実行中落ちる

by 雷電 » 2007年4月20日(金) 21:40

最近またプログラムを組み始めて、思ってもいないエラーに遭遇しました。

Invalid Address specified to RtlFreeHeap
Heap block at 01150DA8 modified at 01150DB1 past requested size of 1
???なぬ?これは何だ・・・
コンパイルは一応通りますが、実行中にエラーで落ちます。
でも、何ゆえか、リリースコンパイルではなく、デバッグモードでは落ちません。

この英語はどういう意味なんですか?

ページトップ