c++ - 调整大型结构 vector 大小时的段错误

标签 c++ vector struct segmentation-fault

下面的代码产生了一个段错误,我不明白为什么。下面的代码使用一个 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/

相关文章:

c++ - 返回非静态本地对象时,选择复制构造函数而不是 move 构造函数

c++ - 在 emplace_back() 中初始化内部结构

c - 静态变量与单例结构

c++ - 我应该在哪里分配这个内存?

c++ - 在 QML 中使用自定义类中的 Q_PROPERTY

c++ - '.size' 的左边必须有类/结构/union

python - 为什么我不能用其他类型解压一个 float 并得到预期的结果?

c++ - 给定一个二维字符矩阵,我们必须检查给定的单词是否存在于其中

python - Boost Python 以 std::vectors 作为参数导入 C++ 函数

r - 两个向量相乘 - 我想要一个标量,但我得到一个向量?