今天碰到一个问题
c++编译时一切正常,运行时出错
0x00007FF6925BE108 处有未经处理的异常(在 AutoProject.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000E3CE403000)。
Unhandled exception at 。。。。。 : Stack overflow (parameters: 0x0000000000000001。。。。。
然后调试发现,是预定义的数组太大了,我这个数组只定义了大约1M
void write(){
char writeBuffer[1048576]; // 1 MBytes
....
}
如果要继续使用这样的大数组的话,当然可以根据new, delete来创建数组,
void write(){
char writeBuffer* = new char[1048576]; // 1 MBytes
....
delete[] writeBuffer;
}
还有一种解决方式,尤其是函数调用频繁的时候,可以把该数组定义成全局变量,这样效率会比较高
char writeBuffer[1048576]; // 1 MBytes
void write(){
....
}
第三种方法就是调整编译器的预定义设置,这种方式会对所有一起编译的项目都带来影响,所以通常情况不推荐这样做。
另外转一个别人的内存分配的帖子:
https://blog.csdn.net/czy47/article/details/80943740
C++中超大数组的空间分配在C或者C++中,在函数(包括main函数)中定义数组,对于任何程序员来说都是so easy的事,当然这通常是对于一些容量小的数据;当我们有大量的数据需要处理的时候,比如1GB大小的数据,按照常规的方式在函数中定义数组空间,往往会运行出错,那么如何解决这样的问题呢?
在这里大家需要了解一点的是,C++中,在函数(包括main函数)中定义超大数组,内存为栈所分配的最大空间为4M,因此在子函数或者main函数中定义超大数组的方式是万万行不通的。
解决方式:为超大数组创建为一个全局数组。
有时候觉得数组使用起来不方便,可以采用定义vector的方式,但需要注意的是,vector通常只能分配出几百MB的空间。
vector vec0; vector vec1; vector vec2; vector vec3; cout
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?