Skip to content

Memory in CountOccurences snippet in Mathematics category #54

Closed
@delphidabbler

Description

@delphidabbler

The following code in the private SortResult function of CountOccurences causes a memory :

  procedure SortResult(
    var A: array of Generics.Collections.TPair<Integer,Cardinal>);
  begin
    Generics.Collections.TArray.Sort<
      Generics.Collections.TPair<Integer,Cardinal>
    >(
      A,
      Generics.Defaults.TDelegatedComparer<
        Generics.Collections.TPair<Integer,Cardinal>
      >.Create(
        function (
          const Left, Right: Generics.Collections.TPair<Integer,Cardinal>):
          Integer
        begin
          Result := Left.Key - Right.Key;
        end
      )
    );
  end;

The fix is to create the comparer outside the method call:

  procedure SortResult(
    var A: array of Generics.Collections.TPair<Integer,Cardinal>);
  var
    Comparer: Generics.Defaults.IComparer<
      Generics.Collections.TPair<Integer,Cardinal>
    >;
  begin
    Comparer := Generics.Defaults.TDelegatedComparer<
        Generics.Collections.TPair<Integer,Cardinal>
      >.Create(
        function (
          const Left, Right: Generics.Collections.TPair<Integer,Cardinal>):
          Integer
        begin
          Result := Left.Key - Right.Key;
        end
      );
    Generics.Collections.TArray.Sort<
      Generics.Collections.TPair<Integer,Cardinal>
    >(A, Comparer);
  end;

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcompletedIssue completed and committed to develop. To be closed on next release

Projects

Status

Completed

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions