ariable needs stack frame???

chb610 2009-12-10 11:33:18
程序里有一个函数S,S里面new了几个数组,返回前delete了。
第一次调用S正常执行,第二次调用提示内存不足。
调试发现第二次进入函数S时,出现ariable needs stack frame。
请问这是怎么回事?怎么解决?
...全文
386 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)
内容概要:本文围绕风光储与电解制氢系统仿真模型展开,重点构建了光伏耦合质子交换膜(PEM)电解水制氢系统的Simulink仿真平台。该模型深度融合风能、太阳能发电、储能系统与电解制氢环节,形成一个多能互补的综合能源系统架构,旨在探究在可再生能源出力波动条件下电解制氢的动态响应特性及能量管理策略。通过Simulink实现了光伏发电单元、风机、储能电池、功率变换器以及PEM电解槽等关键部件的模块化建模,并对系统在多种运行工况下的性能进行了仿真分析,验证了其在氢能稳定产出与能量灵活调节方面的可行性与有效性,为绿氢制备提供了重要的仿真技术支持。; 适合人群:具备电力电子、新能源系统或自动化等相关专业背景的研究生、科研人员及工程技术人员;熟悉Simulink仿真工具并从事综合能源系统、绿色氢能制备等领域研究的专业人士。; 使用场景及目标:①开展风光储氢耦合系统的建模与仿真研究;②优化可再生能源制氢过程中的能量调度与分配策略;③分析电解槽在间歇性电源输入下的动态工作特性与响应能力;④为实际绿氢示范项目的设计与运行提供仿真验证和技术支撑。; 阅读建议:建议读者结合Simulink模型文件进行同步操作与调试,深入理解各功能模块之间的接口关系与控制逻辑,可在现有模型基础上进一步拓展,如引入经济性评估、多目标优化算法或硬件在环测试等内容,以深化对系统性能的认知与研究层次。

65,213

社区成员

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

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