工厂构造中的段错误 class

Segfault in factory constructed class

我遇到一个问题,即段错误发生在随机位置,但这些位置似乎总是相同的。段错误的位置可能会根据我是使用 gdb 还是 valgrind 来尝试解决问题而发生变化,这一事实也让问题变得更加混乱。这 似乎 是一个竞争条件问题,但我并不总是看到我的任何析构函数被调用,所以我不确定为什么会发生这种情况。我没有定义我的复制构造函数,我想这可能是问题所在,但我想了解为什么会这样。

我在 midLevel class 上进行的测试来行使它的功能没有这个问题。我的基本构造有什么缺陷吗?

我的用例是:

最高级别class:

returnObject highLevelClass::performTask( ){

    std::shared_ptr< midLevelClass > midClass;
    std::vector< someType > dataForClass;

    for ( auto it = _someIterate.begin( ); it != _someIterate.end( ); it++ ){

        ...
        buildMidClass( midClass, &dataForClass );

    }

    ...

    return returnObject;

}

returnObject highLevelClass::buildMidClass( std::shared_ptr< midLevelClass > &midClass,
                                            std::vector< someType > *dataForClass ){

    ...
    midClass = midLevelClass( _configurationInfo ).create( )
    midClass.loadData( dataForClass );

    midClass->processData( ); //SOMETIMES IT SEGFAULTS HERE DURING std::vector ALLOCATIONS

    ...

    return returnObject;
}

highLevelClass::~highLevelClass( ){

    //SOMETIMES IT SEGFAULTS HERE

    return;

}

处于中等水平class:

midLevelClass::loadData( std::vector< someType > *data ){

    _data = data; //_data is a std::vector< someType >*

}

std::shared_ptr< midLevelClass > midLevelClass::create( configurationType &_configInfo ){

    if ( _configInfo[ "type" ] == childMidLevelClass ){
        return std::make_shared< childMidLevelClass >( _configInfo );
    }

    _error = new errorNode( "create", "The type is not defined" );
    return std::make_shared< volumeReconstructionBase >( _config, _error );
}

结果是另一个 std::vector(代码的任何其他部分都没有访问它)由于使用 [] 的错误访问而溢出。 gdb 或 valgrind 中没有任何内容表明这是问题所在。答案可能是小心使用 [] 访问 std::vector 并考虑使用 std::vector::at( ).