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

請問一下c++builder的錯誤訊息

尚未結案
cjeter
一般會員


發表:2
回覆:2
積分:0
註冊:2003-09-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-27 12:15:00 IP:61.223.xxx.xxx 未訂閱
請問一下這是何種錯誤阿... 新手上路...請多多指教...謝謝 發表人 - cjeter 於 2003/09/27 12:17:38 發表人 - cjeter 於 2003/09/27 18:35:08
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-28 10:39:33 IP:203.204.xxx.xxx 未訂閱
Exception! Access violation! 會發生這種 Exception 的情況太多了,大多數是因為指標存取不當所造成的,例如: 1. 指標亂指 2. 用完 delete 後,還繼續用 3. 指標所指的東西已經不存在了,還繼續使用 ... 請看一下您的原始碼中對於指標部分的處理吧。 另外,您可以在 IDE 內 debug 您的程式,IDE 會在發生 Exception 時停在對應的 code 上,這樣,就可以知道是那個指標指錯了。    P.S. 請問一下 Antigua and Barbuda 是那兒?風景可好?    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
cjeter
一般會員


發表:2
回覆:2
積分:0
註冊:2003-09-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-28 13:27:48 IP:61.223.xxx.xxx 未訂閱
謝謝...版主大大教導.. 但我的程式可以RUN...是RUN到一半時會出現這種錯誤訊息 可以在麻煩版主大大...幫我看一下嗎...謝謝 我的程式目的是將... 載入的文字檔...搜尋內容 如: AC   465464 ...這一行 存入資料庫..欄位AC  內容為465464 以此類推...將每行文字存入資料庫    //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; AnsiString Filename='\0'; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool openfile=true; if(openfile) if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); Filename=OpenDialog1->FileName; Form1->Caption="記事本" ExtractFileName(Filename); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int x[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, y[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, i=0; int j; if (Form1->Caption=="記事本epd.dat") { TReplaceFlags Flags; Flags >> rfReplaceAll; AnsiString ID2="ID "; AnsiString AC1="AC "; AnsiString DT1="DT "; AnsiString DE1="DE "; AnsiString OS1="OS "; AnsiString HG1="HG "; AnsiString AP1="AP "; AnsiString NP1="NP "; AnsiString DR1="DR "; AnsiString RN1="RN "; AnsiString RX1="RX "; AnsiString RA1="RA "; AnsiString RT1="RT "; AnsiString RL1="RL "; AnsiString ME1="ME "; AnsiString SE1="SE "; AnsiString TX1="TX "; AnsiString KW1="KW "; AnsiString FP1="FP "; AnsiString DO1="DO "; AnsiString RF1="RF "; AnsiString D; for(i=0; iLines->Count; i ) { D=RichEdit1->Lines->Strings[i]; x[0]=D.Pos(ID2); x[1]=D.Pos(AC1); x[2]=D.Pos(DT1); x[3]=D.Pos(DE1); x[4]=D.Pos(OS1); x[5]=D.Pos(HG1); x[6]=D.Pos(AP1); x[7]=D.Pos(NP1); x[8]=D.Pos(DR1); x[9]=D.Pos(RN1); x[10]=D.Pos(RX1); x[11]=D.Pos(RA1); x[12]=D.Pos(RT1); x[13]=D.Pos(RL1); x[14]=D.Pos(ME1); x[15]=D.Pos(SE1); x[16]=D.Pos(TX1); x[17]=D.Pos(KW1); x[18]=D.Pos(FP1); x[19]=D.Pos(DO1); x[20]=D.Pos(RF1); for(j=0; j<9; j ) { if(x[j]!=0) { switch(j) { case 0: x[0] =ID2.Length(); y[0]=0; while (D[x[0] y[0]]!='.') { y[0] ; } ADOTable1->Open(); ADOTable1->Insert(); ADOTable1->FieldByName("ID")->Value=D.SubString(x[0],y[0]); ADOTable1->Post(); D=StringReplace(D,ID2, "", Flags); x[0]=D.Pos(ID2); break; case 1: x[1] =AC1.Length(); y[1]=0; while (D[x[1] y[1]]!=';') { y[1] ; } ADOTable1->Open(); ADOTable1->Insert(); ADOTable1->FieldByName("AC")->Value=D.SubString(x[1],y[1]); ADOTable1->Post(); D=StringReplace(D,AC1, "", Flags); break; case 2: x[2] =DT1.Length(); y[2]=0; while (D[x[2] y[2]]!='.') { y[2] ; } ADOTable1->Open(); ADOTable1->Edit(); ADOTable1->FieldByName("DT")->Value=D.SubString(x[2],y[2]); ADOTable1->Post(); D=StringReplace(D,DT1, "", Flags); x[2]=D.Pos(DT1); break; case 3: x[3] =DE1.Length(); y[3]=0; while (D[x[3] y[3]]!='.') { y[3] ; } ADOTable1->Open(); ADOTable1->Insert(); ADOTable1->FieldByName("DE")->Value=D.SubString(x[3],y[3]); ADOTable1->Post(); D=StringReplace(D,DE1, "", Flags); x[3]=D.Pos(DE1); break; . . . CASE 20
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-30 21:47:26 IP:61.224.xxx.xxx 未訂閱
請使用 [code] // 您的原始碼 [/code] 將您的原始碼包起來,這樣別人才容易看懂您的 code。 我大概看了一下,最有可能發生問題的就是您對 AnsiString 的處理, 您使用了
D=RichEdit1->Lines->Strings[i];
取得字串資料,之後用 .Pos() 去找字串位置... 到此都不會有問題, 有問題的是,您用了 D[index] 去取得某個字,但是只要 index 大於 D 的字串長度,那就會 Exception! 了,您可以另寫一個簡單的程式試試
AnsiString test="12345";
if(test[100]=='1') // 執行到這一行就掛了!!
  ShowMessage("1");
而我不解您的程式的地方是,為什麼還要用 StringReplace 把 D 作改變,這樣的改變會使您一開始所作的 x[] 所取得的位置都沒用了,因為您已把資料改變了,而且還是把字刪除,等於是長度變短,那後面的 D[xx] 就有可能大於當時的長度,而發生 Exception! 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
cjeter
一般會員


發表:2
回覆:2
積分:0
註冊:2003-09-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-30 22:06:47 IP:218.162.xxx.xxx 未訂閱
非常感激...dllee SIR的執導 真是好心友好報的.. 我會繼續修改我的程式.. 今後還希望跟dllee SIR請教...謝謝囉
系統時間:2024-05-06 3:25:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!