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

動態串列沒辦法指到NEXT

尚未結案
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-12 22:53:15 IP:192.192.xxx.xxx 未訂閱
各位前輩好: 下面的程式前半段FOR可以RUN,但後面的FOR中的ptr_need->next確沒有辦法只到下一筆!後來小弟將後半段程式縮減成測試ptr_need看他有無跑到下一個ptr_need,但他似乎真的沒辦法跑! 請各位大大幫我看一下我的程式是否哪邊有問題,以及,是否能給小弟關於這動態陣列的意見,對了,小弟是將動態陣列弄成三維的。(我的程式應該是動態宣告成三維的對吧!?)  
 typedef struct person *PERSON;
struct person {
    double Gray;
    long double Weight;
    PERSON next;
};
///////////上面是全域宣告/////下面在BUTTON中/////  
    Graphics::TBitmap *Bmp = new Graphics::TBitmap();
    Byte *bmp_ptr;
    int row, column;
    TStringList *fp_Member = new TStringList();
    TStringList *fp_Ref = new TStringList();
    TStringList *fp_RefOther = new TStringList();
    TStringList *fp_IptRef_Weight = new TStringList();
    TStringList *fp_RefOut_Weight = new TStringList();
    fp_Member->LoadFromFile("Member.txt");
    PERSON IptRef[100][4];
    PERSON ptr_need = (PERSON)malloc(sizeof(person));
    PERSON ptr_give = (PERSON)malloc(sizeof(person));        //******************************** START ***********************************************
    for (int k=0;k<(fp_Ref->Count*fp_Member->Count);k   )   //k<8
    {
        fp_Ref->LoadFromFile(Path "\\" fp_Member->Strings[k/4] "\\Ref_layer.txt");    
        if (k%4==0)
            row = k/4;     //for IptRef's row
        column = k%4;      //for IptRef's column
        IptRef[row][column] = (PERSON)malloc(sizeof(person));
        ptr_need = IptRef[row][column];            Bmp->LoadFromFile(Path "\\" fp_Member->Strings[k/4] "\\" fp_Ref->Strings[k]);
        for (int i=0;i<25;i  )
        {
            bmp_ptr = (Byte *)Bmp->ScanLine[i];
            for (int j=0;j<25;j  )
            {
                ptr_need->Gray = bmp_ptr[j*3];
                ptr_need->Weight = 0.0;
                ptr_need->next = (PERSON)malloc(sizeof(person));
                ptr_need = ptr_need->next;     //這邊就很順利往下一個
            }
        }
        ptr_need->Gray = 0.0;
        ptr_need->Weight = 0.0;
        ptr_need->next = NULL;
    }                                   //這上面程式可以過
                                        //下面的程式片斷沒辦法過
    //**************************Counting weights the Ref and input layer ************************
    fp_Ref->LoadFromFile("Ref_layer.txt");    
    for (int i=0;i<2;i  )      //fp_Ref->Count=4
    {
        for (int j=0;j<4;j  )
        {
            ptr_need = IptRef[i][j];
            Memo1->Lines->Add(ptr_need->Gray);    //這裡就出現錯誤
            ptr_need = ptr_need->next;            
        }
    }
**我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-13 02:51:31 IP:61.219.xxx.xxx 未訂閱
沒仔細看你的程式,但初步看起來應該是記憶的非法使用 你可以用IsBadReadPtr檢查一下,
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-13 10:49:53 IP:192.192.xxx.xxx 未訂閱
引言: 沒仔細看你的程式,但初步看起來應該是記憶的非法使用 你可以用IsBadReadPtr檢查一下,
jcjroc前輩您好: 感謝您的指引!小弟搜尋了IsBadReadPtr,以下 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/isbadreadptr.asp 但小弟不知道如何使用, IsBadReadPtr(ptr_need, person); <=小弟這樣寫錯誤! 他文章說要用Library: Use Kernel32.lib.,因此小弟在程式前頭加上#include "Kernel32.lib",但卻找不到檔案! 小弟另一個問題是,串列的結構這樣寫不知是否為三維,如圖解釋: 紅色橫條為一組,一組有四張照片,每一張照片的大小為25*25,因此有624個陣列,可否請前輩指引小弟這樣的寫法與觀念是否有問題!小弟的串列觀念不是很好! 請前輩指引小弟!感激! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-13 10:52:24 IP:192.192.xxx.xxx 未訂閱
小弟三維想法如圖所示: **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
lijenyun
一般會員


發表:3
回覆:19
積分:9
註冊:2003-06-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-13 11:12:48 IP:210.244.xxx.xxx 未訂閱
我對BCB不熟,不過 Memo1->Lines->Add的參數型為AnsiString ptr_need->Gray為long Compiler竟然會過?
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-14 10:48:56 IP:192.192.xxx.xxx 未訂閱
引言: 我對BCB不熟,不過 Memo1->Lines->Add的參數型為AnsiString ptr_need->Gray為long Compiler竟然會過?
lijenyun您好: 您可能看錯了,小弟的GRAY是DOUBLE型態,之前小弟有試過用long double的確不形直接放入MEMO中,但小弟加上了Memo1->Lines->Add((WideString)ptr_need->Gray);這樣也可以RUN!只要加了WIDESTRING即可。
 typedef struct person *PERSON;
struct person {
    double Gray;
    long double Weight;
    PERSON next;
};
**我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-14 20:50:51 IP:192.192.xxx.xxx 未訂閱
我PO一下錯誤訊息好了,麻煩各位前輩了!小弟困擾很久,找不到解決之道! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-14 22:00:52 IP:192.192.xxx.xxx 未訂閱
引言:
    
    //******************************** START ***********************************************
    for (int k=0;k<(fp_Ref->Count*fp_Member->Count);k   )   //k<8
    {               真是不好意思~fp_Ref還沒開檔就給他做動作,難怪三維陣列會出錯
        fp_Ref->LoadFromFile(Path "\\" fp_Member->Strings[k/4] "\\Ref_layer.txt");    
        if (k%4==0)
            row = k/4;     //for IptRef's row
        column = k%4;      //for IptRef's column
        IptRef[row][column] = (PERSON)malloc(sizeof(person));
        ptr_need = IptRef[row][column];            Bmp->LoadFromFile(Path "\\" fp_Member->Strings[k/4] "\\" fp_Ref->Strings[k]);
        for (int i=0;i<25;i  )
        {
            bmp_ptr = (Byte *)Bmp->ScanLine[i];
            for (int j=0;j<25;j  )
            {
                ptr_need->Gray = bmp_ptr[j*3];
                ptr_need->Weight = 0.0;
                ptr_need->next = (PERSON)malloc(sizeof(person));
                ptr_need = ptr_need->next;     //這邊就很順利往下一個
            }
        }
        ptr_need->Gray = 0.0;
        ptr_need->Weight = 0.0;
        ptr_need->next = NULL;
    }                                   //這上面程式可以過
                                        //下面的程式片斷沒辦法過
    //**************************Counting weights the Ref and input layer ************************
    fp_Ref->LoadFromFile("Ref_layer.txt");    
    for (int i=0;i<2;i  )      //fp_Ref->Count=4
    {
        for (int j=0;j<4;j  )
        {
            ptr_need = IptRef[i][j];
            Memo1->Lines->Add(ptr_need->Gray);    //這裡就不會有錯了
            ptr_need = ptr_need->next;            //可以順利向下走了
        }
    }
**我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
各位前輩,真是不好意思! 這種粗心大意的問題也來請教,看到沒有人回答(除了兩位大大給予指引),又剛好看到"作業"的文章,真害怕自己這篇文章淪為各位前輩眼中的作業!真的滿害怕的!哈哈!還好小弟自己先解決了!呼! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-14 22:06:11 IP:192.192.xxx.xxx 未訂閱
引言: 沒仔細看你的程式,但初步看起來應該是記憶的非法使用 你可以用IsBadReadPtr檢查一下,
請問有人可以指引小弟如何使用這個方法嗎? 另一個問題同樣是延伸程式中的問題,串列的結構這樣寫不知是否為三維 相當感激各位前輩!請指引小弟吶! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-06-15 22:47:09 IP:61.219.xxx.xxx 未訂閱
引言:
引言: 沒仔細看你的程式,但初步看起來應該是記憶的非法使用 你可以用IsBadReadPtr檢查一下,
請問有人可以指引小弟如何使用這個方法嗎? 另一個問題同樣是延伸程式中的問題,串列的結構這樣寫不知是否為三維 相當感激各位前輩!請指引小弟吶! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
char *Ptr; if(!IsBadWritePtr(Ptr,sizeof(unsigned long)))
dean
一般會員


發表:24
回覆:60
積分:21
註冊:2003-08-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-06-17 09:15:04 IP:192.192.xxx.xxx 未訂閱
引言: char *Ptr; if(!IsBadWritePtr(Ptr,sizeof(unsigned long)))
相當感謝jcjroc前輩的指引! 這次的問題小弟自行解決了,但jcjroc前輩指出如何使用與監看記憶體的方法,小弟相當感激!也學到一招!感謝! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**
系統時間:2024-06-27 0:42:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!