分段错误(核心转储)C++,因为我使用了大量内存 [重复]

Posted

技术标签:

【中文标题】分段错误(核心转储)C++,因为我使用了大量内存 [重复]【英文标题】:Segmentation fault (core dumped) C++ as I use a lot of memory [duplicate] 【发布时间】:2015-02-10 01:59:03 【问题描述】:

在 C++ 中,我使用的是“用户”类,而我的代码只有以下 3 行:

    cout<<"size of user = "<<sizeof(user)<<endl;    //prints 160
    cout<<"size of all users = "<<NUM_OF_USERS*sizeof(user)<<endl;  

    user users[NUM_OF_USERS];  //creates an array of users of size NUM_OF_USERS.

当 NUM_OF_USERS 只有 10,000 时,它可以正常工作(甚至我的所有程序都可以正常工作)。但是当我将它增加到 1000,000 时,它会给出以下错误(仅针对这 3 行代码)。

Segmentation fault (core dumped)

所以,没有其他问题(没有指针或任何东西)。问题是这个类的大量对象没有内存(需要 16,000,000 字节 = 16MB)。

我正在使用一台内存很大的 UNIX 机器,所以我认为 16 MB 并不是很多。那么,如何增加分配给这个特定进程的内存呢?

【问题讨论】:

您正在堆栈上创建阵列,该阵列的空间限制为几 MB 或更少。尝试改用std::vector&lt;user&gt; users(NUM_OF_USERS); 【参考方案1】:

数据在堆栈上分配。堆栈的大小有限,无法调整大小。使用std::vectornew[] 在堆上分配如此大的块。

【讨论】:

谢谢!我将它分配在堆上并且工作正常!将其更改为 user* users = new user[NUM_OF_USERS];

以上是关于分段错误(核心转储)C++,因为我使用了大量内存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c++:分段错误(核心转储)

访问共享进程内存时出现分段错误(核心转储)

使用动态二维数组时的 C++ 分段错误(核心转储)

分段错误(核心转储) - 无法访问的计数器值

C++ 的核心转储分段错误

C++ 地图分段错误(核心转储)