c++のエラー:プロシージャエントリポイント_ZSt28__throw_bad_array_new_lengthvがダイナミックライブラリ~~~から見つかりませんでした

c++での「プロシージャエントリポイント_ZSt28__throw_bad_array_new_lengthvがダイナミックライブラリ~~~から見つかりませんでした」というエラーに関する記録。

発生した問題

C++にてvectorを用い2次元配列を実装するプログラムを書いた。
しかしg++でのコンパイルは通るが、実行の段階でエラーが発生。

1次元配列なら問題ないが2次元配列のときのみこのようなエラーが発生し困った。

対処1

以下のサイトで、「実行ファイルがあるディレクトリに libstdc++-6.dll を置くと良いのでは」とあったので試した。。

自分はMSYS2のMinGW64でC++やっているため、そこから libstdc++-6.dll というファイルを見つけてきて、エラーが起きた実行ファイルがあるディレクトリへコピーした。するとエラーが発生しなくなった。

対処2

しかしこの対処だと、作業ディレクトリを新しくする度に libstdc++-6.dll を持ってこないといけないので面倒だ。なので更に原因をいろいろ調べていたら自分と全く同じ症状を見つけた。

どうやら環境変数pathにて「msys2/mingw64/bin内のlibstdc++-6.dll」とは別のlibstdc++-6.dll を持つディレクトリが登録されているらしい。調べてみたらgnuplot内にlibstdc++-6.dllが入っていた。msysとgnuplotで競合が起きていたみたいだ。 

環境変数pathでgnuplotよりmsys2を先に書くようにしたら解決した。