今天碰到一个问题
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
- 对CSDN网站关于抄袭的投诉的处理建议
- Tesseract OCR训练时碰到的问题和解决方案
- VSCODE在Jetson Nano上打不上断点,无法调试python源码
- ROS2进阶:在windows10上用vs2019编译rviz2
- ROS2 ERROR: OpenGL 1.5 is not supported in GLRenderSystem::initialiseContext at C:\ci\ws\build...
- ROS2 error: can‘t find examples_rclcpp_minimal_subscriber/Release/wait_set_subscriber_library.lib
- 在windows上安装 chocolatey.1.1.0.nupkg
- Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)
- PySpark ERROR: Python in worker has different version 3.9 than that in driver 3.8
- cv2.imshow error: The function is not implemented. Rebuild the library with Windows...