- changed status to open
手札カードの切り取りやコピーでエラー
多数のカードを含むシナリオで次の現象が発生するとの事。
- アクセス違反やウィジェットがdispose済みとのエラーが出る事がある。
- 一度発生すると何度でも出るが、他のキャストカードの手札を編集した後は発生しない。
Comments (11)
-
reporter -
reporter いつの間にかテーブルビューが壊れているのを確認。static thisは関係ない模様。
-
reporter shared static thisとgsharedで様子見。
-
reporter ホイールスクロールを繰り返すと時折Tableの表示が固まるのを確認。
死んでおらず、再描画がほぼされなくなっている様子(稀に表示が改まる)。WM_PAINTイベントは発生しているので、その処理に問題がある模様。問題箇所は特定できず。SWT.VIRTUALは関係なかった。
エラーは発生しないので、手札カードの件とは無関係であると思われる。
-
reporter Tableはマルチバイト文字を長々と表示すると表示がおかしくなる。
-
reporter 確定ではないが、*.exe.manifestによってVisual StyleをOnにしなければ発生しなくなる。
-
reporter アクセス違反等が発生する件は、これまでの報告から推定すると、
- スペックが低いほど出やすい傾向にある
- 大きなシナリオを編集するほど出やすい傾向にある
- たまにAccess ViolationではなくMemory errorが出る
よってWindows API関数でメモリ確保に失敗、その失敗のエラーをライブラリ内でチェックしそこねているのではないか、と推定。
budを使用して-gつきのフルコンパイル・リンクを行い、具体的なエラー発生箇所を特定する予定。
-
reporter OS.MoveMemory (plvfi.item.pszText, StrToTCHARz( buffer[0..length_] ), length_ * 2);
Table.dのこの箇所でアクセス違反の発生を確認。マルチバイト文字列絡みの問題であるように思える。
-
reporter (_tcslen(StrToTCHARz( buffer[0..length_] )) + 1) * 2
これが本来あるべき長さ。
文字列"a日本語"の場合、tcslen()の結果は4になるが、"a日本語".lengthは10になる。そのため、元のコードではMoveMemory()で6バイト分の範囲外アクセスが発生する。結果はランダムなエラーとなりうる。
-
reporter GitHubの最新バージョンで直っている事を確認。
-
reporter - changed status to resolved
fixes
#5→ Wiki macro error: Changeset 6f1d9c785245 not found.
- Log in to comment
音声関係の障害でstatic this関係がスレッドごとに実行されることに気づいたので、とりあえず手許のDWT2の該当箇所を修正してみる。これでしばらく様子見。