调整大型结构矢量大小的分段错误

时间:2011-09-16 00:31:45

标签: c++ vector struct segmentation-fault

下面的代码产生了一个分段错误,我不明白为什么。下面的代码使用向量来存储多个大型结构,但代码不会运行并产生分段错误。我不明白为什么。我的理解是vector resize在堆中分配内存,所以这不应该是堆栈溢出问题。我的系统具有非常大的物理内存(256 GB),代码以64位模式编译,因此仅分配40 MB应该不是问题。有什么想法吗?

非常感谢您提前,

#include <vector>

using namespace std;

typedef struct _tmp_t {
    int a_data[10*1000*1000];/* large array */
} tmp_t;

int main( void ) {
    vector<tmp_t> v_tmp;

    v_tmp.resize( 1 );

    return 0;
}

1 个答案:

答案 0 :(得分:10)

问题是调用std::vector::resize会创建临时对象(注意它有第二个参数,默认为T());这些都驻留在堆栈上。所以你正在筹码。