gpt4 book ai didi

delphi - 无效的指针操作

转载 作者:行者123 更新时间:2023-12-03 15:37:02 25 4
gpt4 key购买 nike

我有一个包含 TOpenDialog 组件 (OpenDialog1) 和一个按钮的表单。OpenDialog1ofAllowMultiSelect(Options)属性设置为 true。

单击按钮后,将执行方法AddFilesToListView:

procedure TForm4.AddFilesToListView();
var
ListItem : TListItem;
I: Integer;
F : File;
LengthOfAudio : TDateTime;
previousCursor : TCursor;

begin
previousCursor := Self.Cursor;
Self.Cursor := crHourGlass;

if OpenDialog1.Execute then
begin
for I := 0 to OpenDialog1.Files.Count - 1 do begin
if FileExists(OpenDialog1.FileName) then begin
ListItem:=ListView1.Items.Add;
ListItem.Caption := 'Test';
ListItem.SubItems.Add(ExtractFileName(OpenDialog1.Files[I]));
ListItem.SubItems.Add(ExtractFilePath(OpenDialog1.Files[I]));
end else
raise Exception.Create('File does not exist.');
end;
end;

Self.Cursor := previousCursor;

OpenDialog1.Files.Free;
end;

运行应用程序时,选择第一个文件,我没有问题,但当想要选择第二个文件时,我收到一条错误消息“Project project3 引发了异常类 EInvalidPointer,并显示消息“无效指针操作”。”

这是什么原因造成的,如何解决?

最佳答案

“无效的指针操作”意味着您释放了不属于您的内存。原因如下三件事之一:

  • 您的程序释放了之前已经释放过一次的内容。
  • 您的程序释放了一些原本从未分配过的东西。
  • 您的程序释放了使用其他内存管理器分配的内容。

在您的代码中,您将释放 TOpenDialogFiles 属性。您没有分配该字符串列表,并且文档没有告诉您释放它,因此可以合理地预期该列表实际上属于对话框组件,并且该组件将在需要时释放它。检查 Dialogs.pas 中的源代码证实了这一点。由于您还释放了该对象,因此出现了双重释放错误,这符合我上面列出的第一个标准。删除该行。

Uwe pointed out ,您还处理文件名的列表,但仅检查一个文件名是否存在。这是您的程序中的逻辑错误,但它不会导致您看到的异常。

关于delphi - 无效的指针操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1065000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com