環境
C++ 17
Clion
Cmake 3.16
問題のコード
以下のコードを実行するとエラーが起きます。
~~また、glovalVの初期化の段階でInitialization of 'globalV' with static storage duration may throw an exception that cannot be caught
という警告が出ます。
この変数をexternで他のファイルからアクセスしたいのでどうしてもグローバル変数にしたいのですがどうしたらいいですか?
intなどはグローバル変数にできるのにmapができない具体的な原因は何なんでしょう? ~~
どうやらこれはグローバル変数が問題なのではないみたいです。
globalVをmain関数の中に移動させてもクラッシュします。(終了コード3)
cpp
1#include <iostream> 2#include <map> 3 4std::map<const char*, bool> globalV = { 5 {"val", true} 6}; 7 8int main() { 9 std::cout << globalV.at("val") << std::endl; 10}
一応解決?
mapの中身を<const char*, bool>
から <std::string, bool>
に変更したところ一応動くようにはなりました。
警告なら出来ているのでは?
プログラムがクラッシュします。
一応警告ではあるんですが実際にクラッシュが起こります。
クラッシュするコードをはって下さい。
質問にかかれているコードでは問題が再現しません。
→キーの型がポインタになっているのを見逃していました。SaitoAtsushiさんの回答をご参照下さい。
僕の環境ではこのコードをそのまま張り付けて実行するとクラッシュします。今確認しました。
上に環境貼っておきます
今Clionで試してみましたが問題なく実行できましたよ。
Cleanしてビルドし直してみては?
確かに今Visual Studioで実行したら普通に実行できました。
なんでこんなことが起こり得るんでしょうね、
今気づいたんですがこれglobalVをローカルに移してもクラッシュします
また、終了コード3で終了しました と出てます。
終了コード3はERROR_PATH_NOT_FOUND 3 (0x3) The system cannot find the path specified.らしいですが...
(誤認していたため削除)
回答2件
あなたの回答
tips
プレビュー