我附上下面的最小代码。问题是静态字符串对象泄漏内存。我认为问题是字符串对象未正确初始化。程序在调试模式下运行正常,但在发布模式下崩溃。
我使用的是Windows 7:64bit - MS Visual Studio 2012
我尝试使用空字符串初始化对象但是没有像这里建议的那样解决问题 what to do if debug runs fine, but release crashes
我启用“将警告视为错误”也没有帮助,因为以下帖子中没有警告 what to do if debug runs fine, but release crashes
还有其他一些建议也像“静态初始化命令惨败”,但我不认为它与我的问题有关。
感谢任何帮助
的main.cpp
//main.cpp
#include "MyParameters.h"
using namespace std ;
int main( int argc, char *argv[] )
{
try
{
cout << "MyParameters::m_outputDir: " << MyParameters::m_outputDir << endl ;
bool initialized = MyParameters::initialize( "myimo.xml" ) ;
cout << "MyParameters::m_outputDir: " << MyParameters::m_outputDir << endl ;
cout << "Terminating the application..." << endl ;
}
catch ( std::exception &e )
{
cout << e.what() << std::endl;
}
}
MyParameters.h
//MyParameters.h
#ifndef __MY_PARAMETERS_H
#define __MY_PARAMETERS_H
#include <string>
#include <iostream>
#include <QString>
class MyParameters
{
public:
static std::string m_outputDir; ///< output directory
static bool initialize( const QString &xmlFile );
private:
MyParameters();
};
#endif /* __MY_PARAMETERS_H */
MyParameters.cpp
//MyParameters.cpp
#include "MyParameters.h"
#include <QDir>
std::string MyParameters::m_outputDir ;
using namespace std ;
MyParameters::MyParameters()
{
}
bool MyParameters::initialize( const QString &xmlFile )
{
m_outputDir = QDir::current().absoluteFilePath( xmlFile ).toStdString(); // --> this crashes
//m_outputDir = "C:\\Dev\\" ; // --> works fine
cout << "m_outputDir: " << m_outputDir << endl ;
cout << "myparameters.xml file reading is complete" << endl ;
return true;
}