直接上代码背景:
首先本人定义了个FeatureVector类
首先本人定义了个FeatureVector类
class FeatureVector { public: vector<Function*> entities; vector<string> features; myFV featureVector[10000][10000]; FeatureVector(); ~FeatureVector(); }; typedef struct { bool isClustered; int clusterNum; int value; }myFV;
此类的entities、features和featureVector容量都很大,都是几千到上万的size。
然后函数A,A定义:
FeatureVector* A(){ }
在类B里定义了成员变量
FeatureVector* fv;
fv=A();
并在B的成员函数里将fv作为参数传递进去
runAlgorithm(fv);
当运行到runAlgorithm(fv);这句时,程序报错 Stack Overflow
本人查找了各种原因,肯定是原因是fv是存储于栈上,但是栈的空间不够全部报错的
但是fv只是作为指针实参传递进去,并不是真正占据很大内存的FeatureVector对象,不懂为什么会针对它报错。
而且,求问各位大大,这个该怎么修改?
解决方案
20
是不是递归层次太多?或死循环递归?
你既然知道是运行到哪个函数出错的,何不跟进去呢?
你用的是不是vs?出错后中断下来可以看到线程堆栈的。
你既然知道是运行到哪个函数出错的,何不跟进去呢?
你用的是不是vs?出错后中断下来可以看到线程堆栈的。
40
你类里面的成员 myFV featureVector[10000][10000];栈空间肯定是不够的,只能new
你这个myFV 占12字节, 所以new一个对象至少需要10000*10000*sizeof(myFV )/1024/1024/1024=1.12G
std::bad_alloc异常的发生一是内存不足,二是内存碎片太多,导致无法申请所需的完整内存。
1. 判断能否内存泄露
2. 判断能否死循环
你这个myFV 占12字节, 所以new一个对象至少需要10000*10000*sizeof(myFV )/1024/1024/1024=1.12G
std::bad_alloc异常的发生一是内存不足,二是内存碎片太多,导致无法申请所需的完整内存。
1. 判断能否内存泄露
2. 判断能否死循环
5
用文件读写模拟内存读写。
参考_fseeki64
参考_fseeki64
10
太大的数组就不要在栈上分配,在堆上动态分配内存