在2007下面,我创建TStringList,使用完后free就不行,报错说是一个非法的指针,但是之前我又没有释放。而且用TStrings就没问题。
还有就是,我用Result := PAnsiChar(AnsiString(s));这种方式转换string为pchar不行('Abstract Error'.),以前版本记得是可以的不知道大家有没有碰到这种情况,2007怎么变了这么多啊???

解决方案 »

  1.   

    string为pchar直接pchar(s)现在还是2007,直接使用即可。
      

  2.   

    如果保证 s 不为空
    可以用 @s[1] 代替 PChar(s)
      

  3.   

    TStringList的创建和释放,我一直都在用,没有什么问题啊,要不你跟踪一下;我的代码是:
    var
      vstr:TStringList;
    begin
      vstr := TStringList.Create;
      vstr.add('进行操作');
      vstr.free;
    end;
      

  4.   

    估计他写成这样了:var strList: TStrings;
    begin
      strList:= TStrings.create;  
      //use StrList 
    end;TStrings.create;这句的问题。 具体的add等方法和函数都在子类中实现的,父类只定义原型,当然要出错误;
    一般是不小心写成这样。 看看就知道原因,提示'Abstract Error'已经说的很清楚了
    var strList: TStrings;
    begin
      strList:= TStringList.create; 就可以
      

  5.   

    其实刚好和你说的相反,
    FLines: TStringList;
    FLines := TStringList.Create;
    FLines.free.这里报错FLines: TStrings;
    FLines := TStringList.Create;
    FLines.free.这就没有问题很奇怪的,但是过了几天我把原来注释掉的代码取消掉注释就可以用了,可能环境还是内存里有问题,说不清楚。。