我在Lazarus Pascal写过程序。它完全写在Mac上,然后我切换到Windows,重新编译它(重新编译.dylib到.dll,重新编译并安装自定义组件),它运行,但当我尝试做任何事情时,它会抛出错误:
在调试模式下:
Project project1 raised exception class 'External:SIGSEGV'. At address 772CD4F1
运行.exe文件:
Access violation.
//编辑
我注意到这部分代码存在问题,特别是ListView.Clear
命令:
procedure AddressList.updateView(ListView : TListView);
var
element : ListElement;
newItem : TListItem;
begin
ListView.Clear;
element := first;
if element = nil then
exit;
while element <> nil do
begin
newItem := ListView.Items.Add;
newItem.Caption := element^.name;
newItem.SubItems.Add(element^.surname);
newItem.SubItems.Add(element^.address);
newItem.SubItems.Add(formatNumber(element^.phoneNumber));
element := element^.next;
end;
end;
这怎么可能,我怎么办?
答案 0 :(得分:3)
在Free Pascal中,Classe实例总是隐式指针。
由于某种原因,您的ListView
似乎不包含正确创建的类实例。 “指针”ListView
指向任何地方。当类方法Clear
尝试访问数据时,会出现分段错误。
ListView
的监视应显示垃圾数据或<invalid>
。