gpt4 book ai didi

delphi - 结果始终相同的 SortCompareFunction 会创建 EAccessViolation

转载 作者:行者123 更新时间:2023-12-02 08:41:07 25 4
gpt4 key购买 nike

如果 SortCompareObjects 函数始终返回相同的结果(而不是不断变化的结果,例如使用 CompareText)?

function SortCompareObjects(Item1, Item2: Pointer): Integer;
begin
Result := 1; // EAccessViolation
// Result := CompareText(...); // No EAccessViolation
end;

MyObjectList: System.Contnrs.TObjectList;

MyObjectList := System.Contnrs.TObjectList.Create;

for i := 0 to x do
MyObjectList.Add(AObject);

MyObjectList.Sort(@SortCompareObjects); // EAccesViolation

最佳答案

比较排序算法在排序函数具有某些属性的假设下访问数组中的元素。具体来说,

  • 如果 f(x,y)<0 则 f(y,x)>0
  • 如果 f(x,y)=0 则 f(y,x)=0
  • 如果 f(x,y)<0 且 f(y,z)<0,则 f(x,z)<0
  • f(x,x)=0

如果您的函数遵守规则,排序算法保证会对数组进行排序。否则,如果你不遵守规则,一切都将失败。什么事情都可能发生。如果您遇到运行时错误,请不要感到惊讶。根据我的经验,最常见的是堆栈溢出,但访问冲突也是有可能的。

关于delphi - 结果始终相同的 SortCompareFunction 会创建 EAccessViolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14963053/

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