“return HeapAlloc(_crtheap, 0, size ? size : 1); 的问题

        在写程序时遇到了一个问题,具体出错点出现在:

     在进行这个程序时,当处于调试状态即使不设置断点,程序也可以完成的很好,但是当运行程序时,总是会报错,在报错处点击调试,进入到调试状态,此时程序显示:

这个地方很熟悉,错误来源也很多,可能是由于空指针,也有可能是堆栈静态分配内存太大的缘故,这里可以利用调试技术中的调用堆栈技术,因为此时,程序将会运行到库函数的malloc.c 的这个函数处:

甚至还会显示无法调用崩溃进程,通过调用堆栈,发现程序正是在大致

L1处停止的,经过分析,查阅资料,发现这是动态分配内存的一个重要的地方,经过仔细观察,发现原因是在分配好L2的内存时,将会申请一个堆,此后建立的都将建在这个堆上,这时候当运行到分配L1的内存时发现它们的地址只相差了4个小单位,由于各自的队应当是独立的,所以应当为L1,L2申请大一点的内存用sizeof表示!!!!,特别是L2,因为它在前!!!!改后的代码为:

L2=(RESlist)malloc(1000*sizeof(RESlist));		
L2->next_node=NULL;			

L1=(SERnode)malloc(1000*sizeof(SERnode));		
L1->next_node=NULL;								
						

由于数据处理样本比较大,所以这里分配了较大的空间:)

经测试,程序可以运行,不再发生报错。

这里还想说一些通过编写这个程序了解到的一些东西,有些知识还需要以后慢慢消化吧。

首先,进程的问题,内存泄漏,无用指针的问题。

编写程序时,总会有些判断的==写成了=号,浪费了很多时间。

其次,还有最后,当执行完函数主体,不管有没有return 0,此时都会进入到一个判断的库函数中,开始,还以为是这里导致了程序不能运行,实际上,这里是一个知识点,即不管是void main,还是 int main,最后都强制返回一个0,这个库函数即判断程序是否自返回0,否则将会添加0,并返回!!

以上为个人理解,可能有关概念还是不够准确吧。

 

 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值