廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 2919 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.020585 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言