我有一个C ++应用程序,对于某些Windows 7用户,它在启动时崩溃。我无法在自己的计算机上重现该错误,但是使用Breakpad生成了一个.dmp文件,该文件显示代码因初始化静态std :: vector数组的“非法指令”而崩溃。这可能意味着什么?
例外:Unhandled exception at 0x000000013F121362 (myApp.exe) in myApp.exe.4328.dmp: 0xC000001D:
Illegal Instruction.myApp.exe! dynamic initializer for Keyboard::key_freqs_() Line 11 C++
该行的来源:
const std::vector<double> Keyboard::key_freqs_ = std::vector<double>({
27.5, 29.135, 30.868, 32.703, 34.648, 36.708, 38.89, 41.203, 43.654, 46.249, 48.999, 51.913,
55, 58.271, 61.735, 65.406, 69.296, 73.416, 77.782, 82.407, 87.307, 92.499, 97.999, 103.82, 110,
116.54, 123.47, 130.81, 138.59, 146.83, 155.56, 164.81, 174.61, 185, 196, 207.65, 220, 233.08,
246.94, 261.63, 277.18, 293.66, 311.13, 329.63, 349.23, 369.99, 392, 415.3, 440, 466.16, 493.88,
523.25, 554.37, 587.33, 622.25, 659.26, 698.46, 739.99, 783.99, 830.61, 880, 932.33, 987.77,
1046.5, 1108.7, 1174.7, 1244.5, 1318.5, 1396.9, 1480, 1568, 1661.2, 1760, 1864.6, 1975.5, 2093,
2217.5, 2349.3, 2489, 2637, 2793.8, 2959.9, 3136, 3322.4, 3520, 3729.3, 3951.1, 4186});
标题:
class Keyboard {
public:
static const std::vector<double> key_freqs_;
...
};
Dissasembly:
const std::vector<double> Keyboard::key_freqs_ = std::vector<double>({
**Crashed here->** 000000013F121362 vmovaps ymm0,ymmword ptr [__ymm@404059fbe76c8b44403ede353f7ced91403d228f5c28f5c3403b800000000000 (01408B7DE0h)]
000000013F12136A movzx r9d,byte ptr [rsp+20h]
000000013F121370 lea r8,[rbp+1F0h]
000000013F121377 vmovups ymmword ptr [rsp+30h],ymm0
000000013F12137D vmovaps ymm0,ymmword ptr [__ymm@404499fbe76c8b44404371eb851eb85240425a9fbe76c8b4404152f1a9fbe76d (01408B7E00h)]
000000013F121385 vmovups ymmword ptr [rsp+50h],ymm0
000000013F12138B vmovaps ymm0,ymmword ptr [__ymm@4049f4dd2f1a9fbe40487fdf3b645a1d40471fdf3b645a1d4045d3b645a1cac1 (01408B7E20h)]
000000013F121393 vmovups ymmword ptr [rsp+70h],ymm0
000000013F121399 vmovaps ymm0,ymmword ptr [__ymm@405059fbe76c8b44404ede147ae147ae404d22b020c49ba6404b800000000000 (01408B7E40h)]
000000013F1213A1 vmovups ymmword ptr [rbp-70h],ymm0
000000013F1213A6 vmovaps ymm0,ymmword ptr [__ymm@40549a0c49ba5e354053720c49ba5e3540525a9fbe76c8b4405152f1a9fbe76d (01408B7E60h)]
000000013F1213AE vmovups ymmword ptr [rbp-50h],ymm0
000000013F1213B3 vmovaps ymm0,ymmword ptr [__ymm@4059f47ae147ae1440587fef9db22d0e40571fef9db22d0e4055d3a5e353f7cf (01408B7E80h)]
000000013F1213BB vmovups ymmword ptr [rbp-30h],ymm0
000000013F1213C0 vmovaps ymm0,ymmword ptr [__ymm@406059eb851eb852405ede147ae147ae405d228f5c28f5c3405b800000000000 (01408B7EA0h)]
000000013F1213C8 vmovups ymmword ptr [rbp-10h],ymm0
...
不确定这是否重要,但在最近的构建中,我开始直接在应用程序文件夹中分发Visual Studio运行时dll,而不是执行vc_redist.exe。