動態串列沒辦法指到NEXT |
尚未結案
|
dean
一般會員 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
各位前輩好:
下面的程式前半段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 發送簡訊給我 |
|
dean
一般會員 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言: 沒仔細看你的程式,但初步看起來應該是記憶的非法使用 你可以用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 發送簡訊給我 |
|
lijenyun
一般會員 發表:3 回覆:19 積分:9 註冊:2003-06-22 發送簡訊給我 |
|
dean
一般會員 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言: 我對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 發送簡訊給我 |
|
dean
一般會員 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言:各位前輩,真是不好意思! 這種粗心大意的問題也來請教,看到沒有人回答(除了兩位大大給予指引),又剛好看到"作業"的文章,真害怕自己這篇文章淪為各位前輩眼中的作業!真的滿害怕的!哈哈!還好小弟自己先解決了!呼! **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻**//******************************** 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 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
dean
一般會員 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |