我有一个简单的记录类型.我分配了此记录的新实例,并使用过程("_ clone")将值从现有记录复制到新记录.我只在分配字符串值时才获得访问冲突.
有任何想法吗?非常感谢帮助.
TYPE定义:
TPointer = ^TAccessoryItem;
TAccessoryItem = Record
Id : Integer;
PartNumber : String;
Qty : Integer;
Description : String;
Previous : Pointer;
Next : Pointer;
end;
Run Code Online (Sandbox Code Playgroud)
Procedure TAccessoryList._clone (Var copy : TAccessoryItem; Var original : TAccessoryItem);
begin
copy.Id := original.Id;
copy.Qty := original.Qty;
copy.Partnumber := original.Partnumber; **// Access errors happens here**
copy.Next := Nil;
copy.Previous := Nil;
end;
Run Code Online (Sandbox Code Playgroud)
致电以下申请:
procedure TAccessoryList.AddItem(Var Item : TAccessoryItem);
Var
newItem : ptrAccessoryItem;
begin
GetMem(newItem, sizeOf(TAccessoryItem));
_clone(newItem^, Item);
end;
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi开发一个记录器/嗅探器.在操作期间,我得到了大量的数据,这些数据可以在压力操作期间累积到大约3 GB的数据.在某些计算机上,当我们到达这些级别时,应用程序停止运行,有时会抛出异常.
目前我正在使用GetMem函数来分配指向每条消息的指针.
是否有更好的方法来分配内存,以便最大限度地减少失败的可能性?请记住,我不能将大小限制为硬限制.
您如何看待使用HeapAlloc,VirtualAlloc甚至是映射文件?哪个更好?
谢谢.
我正在使用从.Net移植到Delphi 7 的TStringBuilder类.
这是我的代码片段:
procedure TForm1.btn1Click(Sender: TObject);
const
FILE_NAME = 'PATH TO A TEXT FILE';
var
sBuilder: TStringBuilder;
I: Integer;
fil: TStringList;
sResult: string;
randInt: Integer;
begin
randomize;
sResult := '';
for I := 1 to 100 do
begin
fil := TStringList.Create;
try
fil.LoadFromFile(FILE_NAME);
randInt := Random(1024);
sBuilder := TStringBuilder.Create(randInt);
try
sBuilder.Append(fil.Text);
sResult := sBuilder.AsString;
finally
sBuilder.free;
end;
mmo1.Text := sResult;
finally
FreeAndNil(fil);
end;
end;
showmessage ('DOne');
end;
Run Code Online (Sandbox Code Playgroud)
我遇到了AV错误.当我创建大小倍数为1024的内存时,我可以缓解这个问题,但有时它仍然会发生.
难道我做错了什么?