ariable needs stack frame???

chb610 2009-12-10 11:33:18
程序里有一个函数S,S里面new了几个数组,返回前delete了。
第一次调用S正常执行,第二次调用提示内存不足。
调试发现第二次进入函数S时,出现ariable needs stack frame。
请问这是怎么回事?怎么解决?
...全文
324 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
freshui 2009-12-11
  • 打赏
  • 举报
回复
应该栈信息被冲掉了吧

注意查查有没有越界

尤其是数组下标的多1和少1问题
chb610 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 kouwenlong 的回复:]
引用 22 楼 chb610 的回复:
问题找到了,是M函数另外一个地方调用了别的类的R函数,而R函数里也有动态分配内存操作,我把动态分配改为直接定义大数组就正常执行了
但是我不知道为什么不能调用别的类里有动态分配内存的函数,哪位高手给讲讲吧

是不是动态内存分配的太多了,导致内存耗尽?
[/Quote]
应该不是吧,在排查到S函数之前我还试过把其他所有动态分配改成静态,但问题依旧,只是出现内存不足的地方不同了。而只需把S函数里的动态分配改静态,其他地方仍然保持动态分配问题就解决了。所以我感觉是两个类之间调用的问题,但不知道里面的根本原因。
kouwenlong 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 chb610 的回复:]
问题找到了,是M函数另外一个地方调用了别的类的R函数,而R函数里也有动态分配内存操作,我把动态分配改为直接定义大数组就正常执行了
但是我不知道为什么不能调用别的类里有动态分配内存的函数,哪位高手给讲讲吧
[/Quote]
是不是动态内存分配的太多了,导致内存耗尽?
chb610 2009-12-11
  • 打赏
  • 举报
回复
问题找到了,是M函数另外一个地方调用了别的类的R函数,而R函数里也有动态分配内存操作,我把动态分配改为直接定义大数组就正常执行了
但是我不知道为什么不能调用别的类里有动态分配内存的函数,哪位高手给讲讲吧
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 chb610 的回复:]
引用 17 楼 winnuke 的回复:
没法子了,把你函数代码贴多一点~
或者你先把函数清空,首先定位问题在哪里

M函数里面是一系列数值计算,出现问题的地方很清楚,就在S函数里面开始new的时候(第二次)不成功,watch窗口出现variable needs stack frame
但好像问题又确实不是S函数本身
[/Quote]
先好好调试下,看问题到底出在哪里。
chb610 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 winnuke 的回复:]
没法子了,把你函数代码贴多一点~
或者你先把函数清空,首先定位问题在哪里
[/Quote]
M函数里面是一系列数值计算,出现问题的地方很清楚,就在S函数里面开始new的时候(第二次)不成功,watch窗口出现variable needs stack frame
但好像问题又确实不是S函数本身
大维啊 2009-12-10
  • 打赏
  • 举报
回复
mark
winnuke 2009-12-10
  • 打赏
  • 举报
回复
没法子了,把你函数代码贴多一点~
或者你先把函数清空,首先定位问题在哪里
chb610 2009-12-10
  • 打赏
  • 举报
回复
不好意思,少敲了个字母,是variable needs stack frame
chb610 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 winnuke 的回复:]
估计是栈的数据被冲掉了。ebp不正常了。
你先把那几个delete注释掉,再运行看看?
[/Quote]
还是不行

申请空间的时候,判断一下,是否申请成功。
第二次进入S出现ariable needs stack frame,申请不了
jiangmingfu010 2009-12-10
  • 打赏
  • 举报
回复
mark
chb610 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kouwenlong 的回复:]
能否贴一个可以调试的代码?
[/Quote]
太多了实在不方便帖,主要都是一些数值计算,但可能出问题的也就上面说的这些地方了
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
申请空间的时候,判断一下,是否申请成功。
winnuke 2009-12-10
  • 打赏
  • 举报
回复
估计是栈的数据被冲掉了。ebp不正常了。
你先把那几个delete注释掉,再运行看看?
chb610 2009-12-10
  • 打赏
  • 举报
回复
跟m多大没关系吧,根据计算情况m的范围在1~1000不等,因为第二次就出问题了,姑且可以认为m=2吧
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
能否贴一个可以调试的代码?
  • 打赏
  • 举报
回复
还是没看出问题。

m有多大?
chb610 2009-12-10
  • 打赏
  • 举报
回复
我也困惑半天了
难道是动态分配内存太多了?M函数里还new了20个数组,会不会这里面有问题?
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
是这个样子吧?
M()
{
for(int i = 0; i < m; i++)
{
...
S(int n, ..., double * ys);
...
}
}
S(int n, ..., double * ys)
{
double *v, *c, *beta, *gamma;

v = new double[n];
c = new double[n-2];
beta = new double[n-2];
gamma = new double[n-2];
// 干活
delete []v;
delete []c;
delete []beta;
delete []gamma;
return ys;
}

还是没看出什么问题来。
chb610 2009-12-10
  • 打赏
  • 举报
回复
看样子问题确实不在S函数本身了,补充一下吧
M()
{
for(int i = 0; i < m; i++)
{
...
S(int n, ..., double * ys);
...
}
}
S的使用情况就是这个样子,也就是for循环到第二次调用S出现问题
加载更多回复(4)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧