Прилагам минималния код по-долу. Проблемът е със обект със статичен низ, който изпуска памет. Мисля, че проблемът е в това, че низовият обект не е инициализиран правилно. Програмата работи добре в режим на отстраняване на грешки, но се срива в режим на освобождаване.
Използвам Windows 7 : 64bit - MS Visual Studio 2012
Опитах да инициализирам обекта с празен низ, но това не реши проблема, както е предложено тук какво да направите, ако отстраняването на грешки работи добре, но изданието се срива
Активирах „Третиране на предупреждения като грешки“ също не помогна, тъй като няма предупреждение, както се предлага в следната публикация какво да направите, ако отстраняването на грешки работи добре, но освобождаването се срива
Имаше и някои други предложения като „фиаско на поръчката за статична инициализация“, но не мисля, че е свързано с моя проблем.
Всяка помощ се оценява
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;
}
ParameterFileParser::checkDirectory
така, че да връща само копие на входния низ? Ами акоsetDirectory
просто зададеvalue
на фиксиран низ и върнеtrue
? Вземете съвета на @Borgleader и създайте MVCE. Може да разрешите собствения си проблем по пътя. - person Edward   schedule 23.10.2014QDir::current().absoluteFilePath( xmlFile ).toStdString();
, но ако използвам фиксиран низ, тогава работи добре. Сривът възниква само в режим на освобождаване, режимът на отстраняване на грешки работи добре. - person Schnell   schedule 23.10.2014QDir::current().absoluteFilePath( xmlFile ).toStdString();
. Когато използвам фиксиран низ вместоQString.toStdString()
, тогава програмата работи добре в режим на освобождаване. Също така работи добре в режим на отстраняване на грешки, но се срива само в режим на освобождаване. Не мога да разбера защо се срива, когато основните изходи. Благодаря много за всички предложения от вас. - person Schnell   schedule 24.10.2014MyParameters::m_outputDir
. Сега как да разреша този проблем е друг въпрос, който ще се опитам да разбера, но нямам представа какво е динамичен atexit. Благодаря много за помощта - person Schnell   schedule 24.10.2014