c++ статичен низов обект се срива в режим на освобождаване

Прилагам минималния код по-долу. Проблемът е със обект със статичен низ, който изпуска памет. Мисля, че проблемът е в това, че низовият обект не е инициализиран правилно. Програмата работи добре в режим на отстраняване на грешки, но се срива в режим на освобождаване.

Използвам 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;
}

person Schnell    schedule 23.10.2014    source източник
comment
MVCE моля.   -  person Borgleader    schedule 23.10.2014
comment
Какъв е резултатът от вашата програма, преди да се срине...?   -  person jpo38    schedule 23.10.2014
comment
@jpo38: Отпечатва на конзолата Прекратяване на приложението... последния ред от главния и след това се срива.   -  person Schnell    schedule 23.10.2014
comment
Същото, ако добавите return 0 в края на вашата основна функция? Qt беше ли компилиран правилно? Опитайте проста Qt програма, създаваща само статичен std::string.   -  person jpo38    schedule 23.10.2014
comment
Има много неща, които можете и трябва да намалите, за да стесните проблема. Например, какво ще стане, ако промените ParameterFileParser::checkDirectory така, че да връща само копие на входния низ? Ами ако setDirectory просто зададе value на фиксиран низ и върне true? Вземете съвета на @Borgleader и създайте MVCE. Може да разрешите собствения си проблем по пътя.   -  person Edward    schedule 23.10.2014
comment
TMTR, но вероятно сте изправени пред фиаско на поръчката за статична инициализация. Почти винаги е добра идея да се консултирате с често задаваните въпроси, преди да попитате.   -  person Cheers and hth. - Alf    schedule 23.10.2014
comment
благодаря момчета за предложенията. Сега ще ги пробвам.   -  person Schnell    schedule 23.10.2014
comment
намалих примера до минимум. Програмата се срива при QDir::current().absoluteFilePath( xmlFile ).toStdString();, но ако използвам фиксиран низ, тогава работи добре. Сривът възниква само в режим на освобождаване, режимът на отстраняване на грешки работи добре.   -  person Schnell    schedule 23.10.2014
comment
Чудесно, а сега разделете този ред на 3 различни реда и вижте кой се проваля.   -  person Surt    schedule 23.10.2014
comment
Разделих го на 3 отделни реда, но програмата се срива, когато основният излезе. Не се срива на QDir::current().absoluteFilePath( xmlFile ).toStdString();. Когато използвам фиксиран низ вместо QString.toStdString(), тогава програмата работи добре в режим на освобождаване. Също така работи добре в режим на отстраняване на грешки, но се срива само в режим на освобождаване. Не мога да разбера защо се срива, когато основните изходи. Благодаря много за всички предложения от вас.   -  person Schnell    schedule 24.10.2014
comment
добре, мисля, че открих проблема. Програмата не се срива в ReleaseWithDebugInfo. Но аз опитах отново в ReleaseWithDebugInfo, компилирах програмата и активирах флага Properties-›Linker-›Debugging-›Generate Debug Info (Yes /DEBUG). След това, когато изпълних програмата, тя се срина и щракнах върху бутона DEBUG. CallStack ми показа динамичен деструктор atexit за MyParameters::m_outputDir. Сега как да разреша този проблем е друг въпрос, който ще се опитам да разбера, но нямам представа какво е динамичен atexit. Благодаря много за помощта   -  person Schnell    schedule 24.10.2014