C++初心者です。
ほぼ触ったことがないので、細かい部分も教えていただきたいです。
Debugで実行した場合、想定通りの動作をして終了するのですが、
Releaseで実行した場合、以下のエラーが出ます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ハンドルされない例外が 0x59158B51(msvcr120d.dll)で発生しました
(実行ファイル内): 0xC0000005: 場所 0x46EA0699 の読み取り中にアクセス違反が発生しました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ブレークポイントをはって、Debugの際とReleaseの際の違いを確認しました。
以下ソースのPropertyConfigurator.cppのconfigure関数の引数「initFileName」の
中身として文字列「log4cpp.properties」が入ってきておらず、
これが原因と考えています。
"入ってきていない"というのは、Debugの際には文字列
「log4cpp.properties」がきちんと渡ってきていますが、
Releaseの場合には、「<文字列の文字の読み取り中にエラーが発生しました。>」
となっています。
■Log.cpp(自作)
C++
1#include "stdafx.h" 2#include "Log.h" 3 4Log::Log() 5{ 6} 7Log::~Log() 8{ 9} 10 11log4cpp::Category& Log::getLogger() 12{ 13 const std::string propatiesFileName = "log4cpp.properties"; 14 log4cpp::PropertyConfigurator::configure(propatiesFileName); 15 16 return log4cpp::Category::getRoot(); 17}
■Log.h(自作)
C++
1#pragma once 2#include<log4cpp/Category.hh> 3#include<log4cpp/PropertyConfigurator.hh> 4 5class Log 6{ 7private: 8 Log(); 9public: 10 ~Log(); 11 static log4cpp::Category& getLogger(); 12};
■メインの処理(自作)
C++
1#include "stdafx.h" 2#include "Log.h" 3 4int _tmain(int argc, _TCHAR* argv[]) 5{ 6 log4cpp::Category& logger = Log::getLogger(); 7 logger.warn("Storm is coming"); 8 return 0; 9}
■Log4cppのPropertyConfiguratorImple.cpp(Log4cppをネットからダウンロード)
C++
1#include "PortabilityImpl.hh" 2#include <log4cpp/PropertyConfigurator.hh> 3#include "PropertyConfiguratorImpl.hh" 4 5namespace log4cpp { 6 7 void PropertyConfigurator::configure(const std::string& initFileName) throw (ConfigureFailure) { 8 PropertyConfiguratorImpl configurator; 9 10 configurator.doConfigure(initFileName); 11 } 12}
■質問内容①
今回の発生事象は、上記のinitFileNameに意図した
文字列「log4cpp.properties」が入ってきていない
ことが原因と考えていますが、あってますでしょうか。
(見当違いな調査をしていないかという点で確認です。)
■質問内容②
「<文字列の文字の読み取り中にエラーが発生しました。>」というのは、
なぜ発生するのでしょうか。
また、Debugで出来ていてReleaseで出来ていないのは
なぜでしょうか。
■質問内容③
今回の質問とは関連がないですが、VC++でDebugやReleaseした場合、
以下のようなフォルダ構成になりますが、
▲プロジェクト名\Debug
▲プロジェクト名\Release
△プロジェクト名\プロジェクト名\Debug
△プロジェクト名\プロジェクト名\Release
▲と△の違いとは何なのでしょうか。
log4cpp等のDLLを配置するのにどこに配置するのが正しいのかの確認です。
▲にはDebugやRelease時の実行ファイルがあるので、同じ箇所へ
DLLを配置するのかなと思ったのですが、Debugする際に、△の方に
配置する必要があるように見えたための質問です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/23 05:27