DELPHI调试状态出现“内存不足”的常规解决方法

  在DELPHI的调试环境中,如果出现多层的指针的嵌套的情况。举个例子:

  TPoint = Packed Record

     x:double;

     y:doiuble;

  end;

  PPoint = ^TPoint;

  Points = array of PPoint;

  我们在访问Points的时候,使用的是for i:= 1 to Points.count do

  这种访问的方式,如果是选择的Points的数量相对的大,在进行3次的访问的循环访问的时候,会出现“内存不足”。或者是当前的内存地址不能访问的问题。

  出现种种情况的主要原因是内存地址快速的赋值和访问,系统的编译环境的在监视内存的时候处理出现地址访问出错。

  我们可以再举个例子进行验证,在我们的语音处理中,需要对语音码流进行处理,比如我们在电脑的PCI声卡上出来的数据是PCM的声码,那么这种编码的码流(二进制数据)非常大,如果使用UDP发送的话,对固定内存段的不停访问,在编译环境中调试的时候会出现“Address  00001 not access ...”的报错,很多的程序员在看到这种问题的时候是很郁闷的,因为你的问题不在语法中,也很难制定具体的原因。 

  这时候我们得到的结果是我们的这种方法不可行,于是开始换算法,换处理的方式,入加指针,加结构,固定内存段改为创建的内存等。

  其实,大家需要注意一个细节,就是你如果不用编译环境调试。用EXE运行,会发现刚才的问题没有出现。这是怎么会事情呢,那就是我们DELPHI编译器的特点决定的,DELPHI在处理编译环境的调试的时候,用来内存跟踪消耗的资源比较的多。如果频繁的对同一个内存段(表面现象是对同一个变量赋值)进行操作的时候,会出现内存地址不可用的报错信息。如果出现这个现象,不用着急。只需要用EXE模式调试即可。

  当然EXE的调试模式是很不方便的,那你可以把这种频繁的内存处理和访问的内容方在DLL中处理,这样在运行的时候等同于EXE,省略了我们在跟踪调试其他程序时候的报错问题。

  以上是DELPHI编程中的一个细节问题,希望能帮助大家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值