全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1428
推到 Plurk!
推到 Facebook!

一個class運行錯誤,about borlanmm.dll (已爬文)

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


發表:11
回覆:14
積分:5
註冊:2007-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-11-17 23:24:44 IP:210.70.xxx.xxx 訂閱
昨天剛寫了一個class,當下跑都沒問題..

今天忘記改了些什麼 就出現了address的borlandmm.dll錯誤

爬文說,include memmgr及include sharemen都沒辦法

只能來此請教板上先進了><

程式碼如下


[code cpp]

#pragma hdrstop
#include "ShareMem.hpp"
#include "Unit2.h"
#include
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
//---------------------------------------------------------------------------

#pragma package(smart_init)
class THMMD
{
private:

public:
float **hmmd;
int w;
int h;
void Delete()
{
for(int i=0;i delete hmmd;
}
THMMD(int x,int y)
{
w = x;
h = y;
hmmd = new float *[h];
for(int i=0;i for(int i=0;i {
for(int j=0;j {
hmmd[i][j]=0.0;
}
}
}
void rgb2hmmd(Graphics::TBitmap *temp) //主程式使用了這個函式
{
float R,G,B;
Byte *ptr;
for(int i=0;i {
ptr = (Byte *)temp->ScanLine[i];
for(int j=0;j {
B = ptr[j*3];
G = ptr[j*3 1];
R = ptr[j*3 2];
//float ss=0,hs=0,hue=0;
float hue=0;
float maxq=max(max(R,G),B);
float minq=min(min(R,G),B);
float diff=maxq-minq; //彩度diff
float sum=(maxq minq)/2;//明亮度sum
if((R==255)&&(G==0)&&(B==255))
{
hmmd[i][j]=999;
continue;
}
if(maxq-minq==0) hue=0;
else
{
if((maxq==R)&&(G>B)) hue=60*((G-B)/(maxq-minq));
else if((maxq==R)&&(G else if(G==maxq) hue=60*(2.0 (B-R)/(maxq-minq));
else hue=60*(4.0 (R-G)/(maxq-minq));
}
int sub=0,hs[4]={1,4,4,4},ss[4]={8,4,1,1};
if((diff > 0)&&(diff <7)) sub=0;
if((diff > 6)&&(diff <21)) sub=1;
if((diff > 20)&&(diff <61)) sub=1;
if((diff > 60)&&(diff <111)) sub=2;
if((diff > 110)&&(diff <256)) sub=3;
int tmp=0;
if (sub!=0)
{
for(int i=0;i {
tmp=tmp (hs[i]*ss[i]);
}
}
else tmp=0;
int a=(hue/(360/hs[sub]));
int b=((32-tmp)/hs[sub]);
int c=(sum/(256/ss[sub]));
hmmd[i][j]= tmp a*b c;
}
}
delete ptr; //然後break在這邊
}
} //刪除了delete ptr那行 結果break在這邊
[/code]

編輯記錄
chrislove87 重新編輯於 2009-11-17 23:25:23, 註解 無‧
chrislove87 重新編輯於 2009-11-17 23:38:36, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-11-18 13:45:44 IP:59.125.xxx.xxx 訂閱
1. for i = xxx 內迴圈不適宜再使用 i 作為變數
2. delete ptr,那 new 在哪?
===================引 用 chrislove87 文 章===================
昨天剛寫了一個class,當下跑都沒問題..

今天忘記改了些什麼 就出現了address的borlandmm.dll錯誤

爬文說,include memmgr及include sharemen都沒辦法

只能來此請教板上先進了><

程式碼如下


[code cpp]

#pragma hdrstop
#include "ShareMem.hpp"
#include "Unit2.h"
#include
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
//---------------------------------------------------------------------------

#pragma package(smart_init)
class THMMD
{
private:

public:
float **hmmd;
int w;
int h;
void Delete()
{
for(int i=0;i
[/code]

chrislove87
一般會員


發表:11
回覆:14
積分:5
註冊:2007-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-11-18 19:55:36 IP:210.70.xxx.xxx 訂閱
您好:
關於1.的問題,的確是我疏忽了,我將i改為其他變數。

關於第二點,我在迴圈前宣告了Byte *ptr,確實沒有new,是應該寫成Byte *ptr=new Byte 這樣嗎?

我試過寫成這樣 結果他出現一樣的錯誤,break在class最後的" };" 這行,沒有在函式裡break

還是想不出問題點ˊˋ懇請版上先進們指教
===================引 用 syntax 文 章===================
1. for i = xxx 內迴圈不適宜再使用 i 作為變數
2. delete ptr,那 new 在哪?
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-11-18 20:06:19 IP:122.116.xxx.xxx 訂閱
不用delete ptr
難道你不知道你程式的意思嗎^^?
chrislove87
一般會員


發表:11
回覆:14
積分:5
註冊:2007-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-11-18 20:11:11 IP:210.70.xxx.xxx 訂閱
您好,感謝您的回覆

我delete我想是因為我對"指標一定要delete"這個觀念印象太深刻 囧

不過我刪掉了這行

一樣出現borlanmm.dll的錯誤 但是沒有break點 囧||
===================引 用 taishyang 文 章===================
不用delete ptr
難道你不知道你程式的意思嗎^^?
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-18 20:28:23 IP:122.116.xxx.xxx 訂閱
你記錯了吧,是有new才要delete

不能單步trace嗎?
chrislove87
一般會員


發表:11
回覆:14
積分:5
註冊:2007-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-11-18 20:39:36 IP:210.70.xxx.xxx 訂閱
問題已解決,確實是有new有delete ,沒new就不用delete  囧 是我觀念的錯誤


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