BCB位址錯誤問題(附圖) |
答題得分者是:syntax
|
mark0110
一般會員 發表:5 回覆:3 積分:1 註冊:2007-08-11 發送簡訊給我 |
時,執行到sig[n]=(short)data[n]-0.95*(short)data[n-1]; : TForm(Owner)
{ } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { int handle; { inf=fopen(file_name,"r"); handle=fileno(inf); if(feof(inf)) fclose(inf); } fseek(inf,dd,SEEK_SET); delete data; Close(); } //--------------------------------------------------------------------------- void show(void) { int n; for(n=1;n sig[n]=(short)data[n]-0.95*(short)data[n-1]; show(); } //--------------------------------------------------------------------------- 編輯記錄
mark0110 重新編輯於 2007-09-21 21:48:35, 註解 無‧
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
很明顯是 sig[n]=(short)data[n]-0.95*(short)data[n-1] 的 n 超出範圍,存取到不可存取(尚未宣告?)的記憶體位址
===================引 用 mark0110 文 章=================== 時,執行到sig[n]=(short)data[n]-0.95*(short)data[n-1]; : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { int handle; { inf=fopen(file_name,"r"); handle=fileno(inf); if(feof(inf)) fclose(inf); } fseek(inf,dd,SEEK_SET); delete data; Close(); } //--------------------------------------------------------------------------- void show(void) { int n; for(n=1;n sig[n]=(short)data[n]-0.95*(short)data[n-1]; show(); } //--------------------------------------------------------------------------- |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
syntax 兄指出的問題點:
DataSize(資料大小) 和 DataCount(型態為short的資料個數)用錯了. 下面程式碼供你參考, 讀檔方式請自行修改. [code cpp] void __fastcall TForm1::Button7Click(TObject *Sender) { int dd = 44; short *data; AnsiString file_name = "UP.WAV"; if(FileExists(file_name)){ TFileStream *f = new TFileStream(file_name, fmOpenRead); try{ int DataSize = f->Size - dd; data = (short*) new char[DataSize]; try{ f->Position = dd; DataSize = f->Read(data, DataSize); int DataCount = (int)DataSize/sizeof(short); short *sig = new short[DataCount]; try{ //計算 for(int i=0; i else sig[i]=(short)(data[i]-0.95*data[i-1]); } //顯示 for(int i=0; i } } __finally{ delete sig; }//short *sig = new short[DataLen]; } __finally{ delete data; }//short *data = new short[DataLen]; } __finally{ delete f; }//if(handle!=-1) } } [/code] ===================引 用 syntax 文 章=================== 很明顯是 sig[n]=(short)data[n]-0.95*(short)data[n-1] 的 n 超出範圍,存取到不可存取(尚未宣告?)的記憶體位址 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |