ASSERT: "!newInterval._ranges.isEmpty()" in file compiler\qv4ssa.cpp, line 3780
問題
アプリケーションが QML ロード時に下記のエラーで終了する。
ASSERT: "!newInterval._ranges.isEmpty()" in file compiler\qv4ssa.cpp, line 3780 Invalid parameter passed to C runtime function. Invalid parameter passed to C runtime function.
問題の署名: 問題イベント名: APPCRASH アプリケーション名: hello_qtquick.exe アプリケーションのバージョン: 0.0.0.0 アプリケーションのタイムスタンプ: 00000000 障害モジュールの名前: Qt5Cored.dll 障害モジュールのバージョン: 5.3.2.0 障害モジュールのタイムスタンプ: 777a675f 例外コード: 40000015 例外オフセット: 0000f69a OS バージョン: 6.1.7601.2.1.0.256.48 ロケール ID: 1041 追加情報 1: 4d65 追加情報 2: 4d6520c0dd82340ae2d0dd736fae64aa 追加情報 3: 57d4 追加情報 4: 57d421dc8bcfd80514a145b7dac16eae オンラインのプライバシーに関する声明をお読みください: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0411 オンラインのプライバシーに関する声明が利用できない場合は、プライバシーに関する声明をオフラインでお読みください: C:\Windows\system32\ja-JP\erofflps.txt
環境
- Qt 5.3.2
- Windows 7 Professional 64-bit
原因
配列の要素をコピーした変数と、NaN な変数とのビット演算がメソッド内に2つあり、結果を配列へ直接代入しているため。
Rectangle { property variant array: [0] Component.onCompleted: { var x = array; var a = x[0]; var b = NaN; if(a & b) x[0] = a & b; } }
解決策
- ビット演算の結果を変数に代入する。
Rectangle { property variant array: [0] Component.onCompleted: { var x = array; var a = x[0]; var b = NaN; if(a & b) a = a & b; } }
- NaN な変数を使わせない。
Rectangle { property variant array: [0] Component.onCompleted: { var x = array; var a = x[0]; var b = NaN; if(isNaN(b)) b = 0; if(a & b) x[0] = a & b; } }