分段错误(核心转储)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<user> users(NUM_OF_USERS);
。
【参考方案1】:
数据在堆栈上分配。堆栈的大小有限,无法调整大小。使用std::vector
或new[]
在堆上分配如此大的块。
【讨论】:
谢谢!我将它分配在堆上并且工作正常!将其更改为 user* users = new user[NUM_OF_USERS];以上是关于分段错误(核心转储)C++,因为我使用了大量内存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章