線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1816
推到 Plurk!
推到 Facebook!

BCB位址錯誤問題(附圖)

答題得分者是:syntax
mark0110
一般會員


發表:5
回覆:3
積分:1
註冊:2007-08-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-21 21:44:49 IP:125.231.xxx.xxx 訂閱
時,執行到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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-22 02:36:53 IP:61.64.xxx.xxx 訂閱
很明顯是 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-04 17:57:03 IP:123.193.xxx.xxx 訂閱
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 if(i==0) sig[i]=0;
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 超出範圍,存取到不可存取(尚未宣告?)的記憶體位址
系統時間:2024-05-02 19:11:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!