【问题标题】:How to fix this EInvalidPointer error while translating Free Pascal into Delphi?如何在将 Free Pascal 转换为 Delphi 时修复此 EInvalidPointer 错误?
【发布时间】:2010-10-31 00:07:58
【问题描述】:

我们正在尝试在 delphi 中使用由 Free Pascal 生成的 pas 文件。链接在: http://www.markwatson.com/opensource/FastTag_Pascal.zip

测试时提示InValidPointer。请在调试器中查看以下错误行。

interface

procedure ReadLexicon;
type sarray = array[1..12] of string;
type big_sarray = array[1..1000] of string; { used for word lists and tags: limit on size of input text }
type psarray = ^sarray;

{function GetTagList(word: string): psarray;}
procedure TagWordList(wordList : big_sarray; var tags : big_sarray);

implementation

uses SysUtils, Classes;

 {       Hash Table Support - copied from FreePascal source: benchmork shootout examples }

type
   THashEntryPtr = ^THashEntryRec;
   THashEntryRec = record
      name : string;
      number : psarray;
      next : THashEntryPtr;
   end;

const
   TABLE_SIZE = 100000;

...
...
...
function GetTagList(word: string): psarray;
var
ret : psarray;
ok : boolean;
begin
 ok := localHash.fetch(word, ret);
 if ok then GetTagList := ret else GetTagList := nil;
end;

procedure TagWordList(wordList : big_sarray; var tags : big_sarray);
var i : integer;
    x : real;
    psa : psarray;
    lastThreeChars : string;
    lastTwoChars : string;
    lastChar : string;
    firstTwoChars : string;
    tagFirstTwoChars : string;
    begin
 for i := 0 to length(wordList) do
  begin
   **psa := GetTagList(wordList[i]);///// EInvalidPointer ERROR** 
   if psa <> nil then tags[i] := psa^[1] else tags[i] := '???';
  end;

...
...
...

我们如何解决它。 非常感谢您。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    原源码没有设置任何编译模式,所以默认的TP like模式是激活的,意思是string=shortstring。

    用短字符串替换整个源字符串中的,它可能会起作用。

    【讨论】:

    • 亲爱的 Marco van de Voort,它现在可以工作了,尽管我仍然不知道为什么应该按照您的建议替换它,并且加载该词典文件并运行似乎很慢。非常感谢。
    【解决方案2】:

    我可以在 TagWordList 过程中找到至少两个错误。

    1. for i := 0 to length(wordList) do,数组是从 1 开始的,所以循环必须从 1 开始。
    2. 稍后有一个检查 if i &gt; 0 由于同样的原因而失败。

    这也可能是类型 big_sarray = array[1..1000] of string; 的错误定义。如果您将其更改为基于 0 的数组,它可能会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多