下面的代码产生了一个分段错误,我不明白为什么。下面的代码使用向量来存储多个大型结构,但代码不会运行并产生分段错误。我不明白为什么。我的理解是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;
}
答案 0 :(得分:10)
问题是调用std::vector::resize
会创建临时对象(注意它有第二个参数,默认为T()
);这些都驻留在堆栈上。所以你正在筹码。