广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 2941 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
IPIS
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x1
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] Turbo C记忆体问题
Turbo C记忆体问题

01 #include <stdio.h>
02 #include <conio.h>
02 #include <dos.h>
04 #include <float.h>
05 #include <math.h>
06 #include <alloc.h>
07 void main(void)
08 {
09 long fori=0,nums=3000;
10 double far *bigarray;
11 if ((bigarray=farmalloc(nums*sizeof(double)))==NULL)
12 {
13 printf("sbrk failed.\n");
14 getch();
15 exit(0);
16 }

17 for (fori=0;fori<100;fori++)
18 *(bigarray+fori)=0.01*fori;


19 for (fori=0;fori<100;fori++)
20 printf("%3.7f\n",*(bigarray+fori));

21 getch();
22 farfree(bigarray);
23 free(bigarray);
24 getch();
25 farfree((float *)bigarray);
26 free((float *)bigarray);
27 } ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容




^_^
献花 x0 回到顶端 [楼 主] From:未知地址 | Posted:2007-04-19 15:23 |
GNUGCC
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x11
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

配置记忆体没问题,问题出在你是否有将编译器的记忆体使用模式改成 Large 或是 Huge ?
因为如果没有改的话这些呼叫会没作用因为编译器预设记忆体使用模式是在 64 K 范围内,超过当然会出现错误。

这个叙述 :
if ((bigarray=farmalloc(nums*sizeof(double)))==NULL)

最好改成
if ((bigarray=(double far*)farmalloc(nums*sizeof(double)))==NULL)

因为 farmalloc() 回传的是 void far*, 有些编译器会强制转换成对应的型态为了相容性最好养成这样的习惯


这个叙述好像有问题,原本的才是对的
17new for (fori=0;fori<100;fori++)
18new *(bigarray+(fori*sizeof(double)))=0.01*fori;
19new for (fori=0;fori<100;fori++)
20new printf("%3.7f\n",*(bigarray+(fori*sizeof(double))));


这个有问题 :
22 farfree(bigarray);
23 free(bigarray);
24 getch();
25 farfree((float *)bigarray);
26 free((float *)bigarray);
27 }

释放记忆体只要呼叫 farfree 一次就够了, 不用再呼叫 free, 就算呼叫 free 也没有作用.


献花 x0 回到顶端 [1 楼] From:台湾中华电信HINET | Posted:2007-04-25 01:21 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.015673 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言