下面的代码产生了一个段错误,我不明白为什么。下面的代码使用一个 vector 来存储多个大结构,但是代码没有运行并产生了段错误。我不明白为什么。我的理解是 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;
}
最佳答案
问题是调用std::vector::resize
会创建临时对象(注意它有第二个参数默认为T()
);这些驻留在堆栈上。所以你正在搞砸你的筹码。
关于c++ - 调整大型结构 vector 大小时的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438968/