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

私有数组变量分配地址空间出错,请大大帮忙!!!

 
icyblow
一般會員


發表:1
回覆:1
積分:0
註冊:2006-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-26 15:20:28 IP:221.15.xxx.xxx 訂閱
type

.....

MapData=Packed record //地图的数据
Size:integer;
Data:array of byte;
end;


TReadMap = class(TObject)
Private
..........................................
m_jpeg:MapData; // JPEG 数据
..........................................
...........................................
function ReadJPEG(fp:TFileStream;Flag,Size:integer;var m_jpeg:MapData):boolean; // 读取地图JPEG的数据

........................................
Public
constructor Create(Ifilename: string);overload;
destructor Destroy; override;

procedure LoadMap; //加载地图文件

.....................

function ReadJpegData:MapData; // 读取JPEG的数据
.........................
protected

end;
// 读取地图JPEG的数据
function TReadMap.ReadJPEG(fp:TFileStream;Flag: integer; Size: integer):boolean;
begin
SetLength(m_jpeg.Data,0); // 分配单元数据的内存空间 ---???? 在此出错!!!!!!!
fp.Read(m_Jpeg.Data,size); // 读取单元JPEG的数据
m_jpeg.Size:=size;
result:=true;
end;



请求大大帮忙!!!!!!!




Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-26 18:19:12 IP:211.22.xxx.xxx 未訂閱
type
pMapData = ^MapData;

MapData=Packed record
Size:integer;
Data:array of byte;
end;

TReadMap = class(TObject)
Private
m_jpeg:pMapData;
function ReadJPEG(fp:TFileStream;Flag,Size:integer;m_jpeg:pMapData):boolean; // 读取地图JPEG的数据
Public
constructor Create(Ifilename: string);overload;
destructor Destroy; override;
procedure LoadMap; //加载地图文件
function ReadJpegData:MapData; // 读取JPEG的数据
protected
end;

constructor TReadMap.create(Ifilename: string);
begin
Inherited;
New(Self.m_jpeg);
.....

end;

destructor TReadMap.destroy;
begin
Dispose(Self.m_jpeg);
.....
Inherited;

end;

function TReadMap.ReadJPEG(fp:TFileStream;Flag: integer; Size: integer;m_jpeg:pMapData):boolean;
begin
//SetLength(m_jpeg^.Data,0);用Winapi ZeroMemory初始化吧~
fp.Read(m_Jpeg^.Data,size);
m_jpeg^.Size:=size;
result:=true;
end;

Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-26 18:23:21 IP:220.130.xxx.xxx 訂閱
你用SetLength就syntax上是沒錯的,
但是指向record的時候有個問題,record是連續空間,
當你使用SetLength時,它會為Data重新配置記憶體,
於是新的Data並不會在原先的記憶體位置,這時候就會出錯了。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
icyblow
一般會員


發表:1
回覆:1
積分:0
註冊:2006-11-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-27 15:25:37 IP:221.15.xxx.xxx 訂閱

New(Self.m_jpeg);



Dispose(Self.m_jpeg);



m_jpeg^.Size:=size;


这几句编译不过!!
系統時間:2024-05-14 5:25:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!