您当前的位置: 首页 >  c++
  • 0浏览

    0关注

    483博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++未经处理的异常...stackoverflow(参数: 0x0000000000000001...)-- 分配大内存

高精度计算机视觉 发布时间:2019-07-04 11:41:38 ,浏览量:0

今天碰到一个问题

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

关注
打赏
1661664439
查看更多评论
立即登录/注册

微信扫码登录

0.0361s