有一段代码:
        vSize := sizeof(buf);
        try
                fs:=TFileStream.Create('D:\DataBase.dat',FmCreate);
                fs.write(buf, vSize);
        finally
                fs.Free;
        end;
运行后就出现Variable 'fs' might not have been initialized的错误提示,但程序运行结果还是正确的,是什么原因呢?

解决方案 »

  1.   

    只是个编译器警告而已。由于有try语句出现流程分支而出现的。你把try...finally结构暂时注释调再编译警告就会消失。
      

  2.   

    修改:
            vSize := sizeof(buf);
            try
                    fs:=TFileStream.Create('D:\DataBase.dat',FmCreate);
                    fs.write(buf, vSize);
            Except
                    fs.Free;
            end;
      

  3.   

    只是警告,一般不会有问题,应该改成这样:
    vsize := sizeof(buf);
    fs := TFileStream.Create('D:\Database.Data', fmCreate);
    try
      fs.Write(buf, vSize);
    finally
      fs.Free;
    end;netlib(河外孤星) 的做法是错误的。
    警告的原因是有可能 fs 在 create 方法时失败,这样 fs.Free 就会有异常,虽然说一般 create 时出错的可能性不大。
      

  4.   

    同意CloneCenter(复制中心)  ^_^