線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2141
推到 Plurk!
推到 Facebook!

堆疊溢位

答題得分者是:taishyang
egghead253
一般會員


發表:25
回覆:13
積分:7
註冊:2009-05-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-23 18:12:33 IP:219.84.xxx.xxx 訂閱

[code cpp]

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int a[7361][7361];
for(int i=1;i<=7361;i )
{
for(int j=1;j<=7361;j ) //7361
{

for(int x=1;x<=79;x )
{
eg1=ADOQuery1->Fields->Fields[i]->AsString.ToDouble();
eg2=ADOQuery2->Fields->Fields[i]->AsString.ToDouble();
se=(eg1-eg2)*(eg1-eg2);
e=(e se);
}
a[i][j]=int(sqrt(e));
e=0;
ADOQuery2->Next();
}
ADOQuery1->Next();
}
}


[/code]





請問一下先進如果發生了溢位有辨法解決嗎?


taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-23 18:24:50 IP:122.116.xxx.xxx 訂閱
int a[7361][7361]; 改用動態配置記憶體的方式
請查詢[stack overflow]

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-24 16:00:51 IP:114.32.xxx.xxx 未訂閱
您好,

我記得 index 是從 0 計起
所以範圍是 0..7360 而非 1..7361

請確認一下.

另外, 7361*7361*4 會不會超過 2^32 ?
算數不好, 請您自行算一下

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-09-24 16:21:37, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-24 17:09:19 IP:203.75.xxx.xxx 未訂閱
用vector來取代動態陣列會不會更好呢?
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-11-11 12:13:41 IP:59.124.xxx.xxx 訂閱
接連看到兩個相似的問題,在這篇「關於BCB的記憶體空間釋放」istillloving 所問的
和這一篇egghead253提的堆疊溢位是一樣的問題
在變數的生命週期與範圍及其實際佔用空間概念不清
程式設計本來就不是很難的事,東抄西改都能拼出一個雜燴出來
但是怎麼從陽春麵programmer 提升到牛肉麵programmer
關鍵是效能與穩定性 (效能不是靠提升硬體等級)
以egghead253 例子而言,loop 7361*7361*79 次,這樣的loop 對系統的影響要考慮到,也許用thread 讓系統比較順
不要放在Button1Click 裡
或是以preload 的機制,將資料庫的資料先放到double 陣列裡,運算時降低資料庫對速度的影響
這些只是參考,方法不只一種
在寫之前能想到,架構就會清楚明確
在寫之後才想到,若花點時間調整,也是OK的
總是比寫完後覺得會動就好這樣的心態好得多了
勉勵新手不要只是把程式寫出來就好,基礎功要練好... 否則只是害人害己
害人:系統不穩定讓人痛苦,交接給別人…讓別人痛苦
害己:怎麼找都找不到問題…讓自己痛苦

PS:GrandRURU所提的 vector 當然方便,但在速度上陣列還是比較快^^




===================引 用 egghead253 文 章===================


[code cpp]

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int a[7361][7361];
for(int i=1;i<=7361;i )
{
for(int j=1;j<=7361;j ) //7361
{

for(int x=1;x<=79;x )
{
eg1=ADOQuery1->Fields->Fields[i]->AsString.ToDouble();
eg2=ADOQuery2->Fields->Fields[i]->AsString.ToDouble();
se=(eg1-eg2)*(eg1-eg2);
e=(e se);
}
a[i][j]=int(sqrt(e));
e=0;
ADOQuery2->Next();
}
ADOQuery1->Next();
}
}


[/code]





請問一下先進如果發生了溢位有辨法解決嗎?


系統時間:2024-03-29 15:10:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!