push_back上的分段错误

The*_*777 -4 c++ vector segmentation-fault

我正在创建一个带有一些设计模式的小程序,我正在尝试实现一个单例.在这个单例类中,我有一个包含我自己定义的File对象的向量.

现在,在进行实际的push_back时,我遇到了分段错误.我尝试删除单例模式,push_back工作得很好.我在一个论坛上看到问题可能是由于矢量尚未初始化而引起的.他们的方式是否允许我使用我的矢量和我的单例模式而不会导致分段错误?

编辑:

标题:

class FileManager
{
public:
    static FileManager* GetManager();
    ~FileManager();

    void InitManager();

    void LoadAllTitle();

private:
    FileManager();
    static FileManager* _fileManager;

    std::vector<File> _files;
};
Run Code Online (Sandbox Code Playgroud)

资源:

//C++ Header
#include <iostream>

//C Header

//local header
#include "filemanager.h"
#include "settings.h"
#include "defs.h"
#include "file.h"
#include "utilities.h"

FileManager* FileManager::_fileManager = NULL;

FileManager* FileManager::GetManager()
{
    if( _fileManager )
    {
        _fileManager = new FileManager();
    }

    return( _fileManager );
}

FileManager::FileManager()
{
}

FileManager::~FileManager()
{
}

void FileManager::InitManager()
{
    int numberOfFile = Settings::GetSettings()->NumberOfFile() + 1;
    for( unsigned int i = 1; i < numberOfFile; i++ )
    {
        std::string path = "data/data";
        path += IntToStr( i );
        path += ".ndb";

        File tempFile( path );

        _files.push_back( tempFile );  // segmentation fault
    }

    printf( " Done...\n" ); 
}

void FileManager::LoadAllTitle()
{
    int numberOfFile = Settings::GetSettings()->NumberOfFile() + 1;
    std::string titles = "ALL TITLES: \n";

    for( unsigned int i = 1; i < numberOfFile; i++ )
    {
        titles += _files[i].ReadTitle();
        titles += "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在main.cpp中的调用

FileManager::GetManager()->InitManager();
Run Code Online (Sandbox Code Playgroud)

问题是如果我将我的构造函数放在公共场所并在main中执行此操作:

FileManager fm;
fm.InitManager();
Run Code Online (Sandbox Code Playgroud)

这不会返回分段错误

ild*_*arn 5

你的逻辑是倒退的 - if (_fileManager)应该是if (!_fileManager).