0

次の簡単なプログラムをコンパイルして実行すると、開発者マシンで正常に動作します(Visual Studio 2015,64ビット)。 x64の-再配布可能がインストールされているにもかかわらず、Windowsのエラーダイアログで別のマシンがクラッシュした上で同じコードを実行std :: shared_ptrが別のコンピュータのMSVCでクラッシュしますか?

(msvcp140.dll):

#include <memory> 
#include <iostream> 

int main(int argc, char **argv) { 
    std::shared_ptr<int> test; // comment out to run on both machines 

    std::cout << "Done: " << std::endl; 
} 

共有ポインタで行を削除するには、それを仕事になります。

どのような問題が起こっているのか、どのようにデバッグするのですか?これは誰のために有用である場合には

+0

msvcp140.dllに問題があるようです。アプリケーションフォルダ内の他のシステムから作業中のdllをコピーして、もう一度テストしてください。 – seccpur

+0

クラッシュマシンからミニダンプを収集して調査します。エラーは何ですか?どのような設定ですか? (私は 'release'では、この行は完全に最適化されているような違いはないはずです)。その場合は、両方のマシンで* this *コードを実際に試してみてください。 –

+0

どのようなエラーメッセージですか? –

答えて

0

は、私は、問題を発見:

をWindowsイベントビューアでは、私は、クラッシュの原因を発見した:例外が0xc000001dまたはillegal instructionました。 /arch:AVXvpxorvmovdqu命令は上で実行しない、生成されたので、

int main(int argc, char **argv) { 
00007FF749A816B0 sub   rsp,48h 
00007FF749A816B4 mov   qword ptr [rsp+20h],0FFFFFFFFFFFFFFFEh 
00007FF749A816BD vpxor  xmm0,xmm0,xmm0 
00007FF749A816C1 vmovdqu  xmmword ptr [test],xmm0 
    std::shared_ptr<int> test; // comment out to run on both machines 

    std::cout << "Done: " << std::endl; 
00007FF749A816C7 lea   rdx,[string "Done: " (07FF749A86C70h)] 
00007FF749A816CE mov   rcx,qword ptr [__imp_std::cout (07FF749A8A0D8h)] 
00007FF749A816D5 call  std::operator<<<std::char_traits<char> > (07FF749A8107Dh) 
    ... 

は、あなたが見ることができるように:Appareantly私のコードは、上記のスニペットのために、次のコードで、その結果、/arch:AVXコンパイルフラグを使用してコンパイルされました(私がテストしたもののように)古すぎるプロセッサ。

解決策は、古いプロセッサをサポートするためのAVX命令の有無にかかわらず、実行可能ファイルの別々のバージョン(またはプログラムの別々のパス)を使用することです。

関連する問題