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

開檔時出現 access violation

尚未結案
lalokalaloka
一般會員


發表:9
回覆:4
積分:2
註冊:2004-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-16 01:08:12 IP:140.117.xxx.xxx 未訂閱
    我的程式碼如下  這是一個讀任意檔案近來
計算出每一個 char出現幾次
並將次數由大到小用link list排序的程式
連結如下  http://140.117.189.47/hw7.rar    #include
#include
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 TForm1 *Form1;
 struct sorting_list
 {
 int count;
 AnsiString st;
 struct sorting_list *before,*after;
 };
  FILE *f;     struct sorting_list *head,*rear,*find;     struct node
 {
  AnsiString string;
  struct node *father,*leftson,*rightson;
};      AnsiString filename,st;
   struct Ascii
{
int count;
char st;
};
struct Ascii ascii[255];    void __fastcall TForm1::N2Click(TObject *Sender)
{         f=fopen("222.txt","a ");       int i,j,k;       for(k=0;k<=255;k  )
   {
   ascii[k].count=0;       }        if(OpenDialog1->Execute())
    {
      filename=OpenDialog1->FileName;
    }
    else return;     //**********計算每一個字元有多少個
  TFileStream* fs = new TFileStream(filename, fmOpenRead);
這ㄧ行有時候會出錯
 char AByte;        while(fs->Read(&AByte, 1))
    {
     k=AByte;
     ascii[k].count  ;
     ascii[k].st=AByte;   //array[k].count  ;
    }          for(k=0;k<=255;k  )       fprintf(f,"%d次數=%d\n",k,ascii[k].count);      fclose(f);
 /*
 //----------------------------建 link list
head->count=ascii[0].count;          // <<<<<<<<<<<<<<<< 指向這ㄧ行說無法開啟檔案
 head->st=ascii[0].st;
 rear=head;
 head->before=head->after=NULL;     //----------------------------------- 排序
 for(i=1;i<255;i  )
 {
   struct sorting_list *ps;
   ps=(sorting_list*)malloc(sizeof(sorting_list));
   ps->count=ascii[i].count;
   ps->st=ascii[i].st;
   if(ps->count>=head->count)
   {
    ps->before=NULL;
    ps->after=head;
    head->before=ps;
    head=ps;
   } //if
   else if(ps->count<=rear->count)
   {
      ps->after=NULL;
      ps->before=rear;
      rear->after=ps;
      rear=ps;
   } //else if
    else
    {
     for(find=head;find->count>=ps->count&&find->after->countcount;find=find->after);
      find->after=ps;
      ps->before=find;
      ps->after=find->after;
      find->after->before=ps;
    } //else    }//for              */
            
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-16 22:32:07 IP:61.59.xxx.xxx 未訂閱
struct Ascii ascii[255]; for(k=0;k<=255;k ) { ascii[k].count=0; } 爆掉了.....下面還有一個回圈也是這樣 修改這邊應該就可以了.........:)
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-17 08:55:43 IP:61.66.xxx.xxx 未訂閱
struct Ascii ascii[255];  應該只有ascii[0]~ascii[254]共255個
for(k=0;k<=255;k  )    k = 0 ~255 => 共256個,多了一個 
{
   ascii[k].count=0;
} 
系統時間:2024-05-15 9:37:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!