unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,math,FlashCarList;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
procedure DrawACar(Canvas:TCanvas;x,y:integer;CarKind:integer;direction:integer);
Procedure DrawAllCar(Canvas:TCanvas);var
  Form1: TForm1;
  BitMap:TBitMap;implementation{$R *.dfm}procedure TForm1.FormPaint(Sender: TObject);
begin
  BitMap:=TBitMap.Create;
  BitMap.LoadFromFile('Car1.bmp');
  Form1.Canvas.Draw(10,10,BitMap);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  DrawAllCar(Form1.Canvas);
end;
procedure DrawACar(Canvas:TCanvas;x,y:integer;CarKind:integer;direction:integer);
begin
    case CarKind of
    1:begin
         canvas.Draw(x,y,Image1.Picture.Bitmap);
      end;
    2:begin
         canvas.Draw(x,y,Image2.Picture.Bitmap);
      end;
    3:begin
         canvas.Draw(x,y,Image3.Picture.Bitmap);
      end;
    4:begin
         canvas.Draw(x,y,Image4.Picture.Bitmap);
      end;
    end;
end;Procedure DrawAllCar(Canvas:TCanvas);
var x,y:integer;
    carkind:integer;
    direction:integer;
    pCarLinked: PFlashCarLinked;
    ////////////////////////////////////////////////////
    Test:PFlashCarLinked;
begin
    Test.CarPoint.X:=100;
    Test.CarPoint.Y:=100;
    Test.CarType:=2;
    Test.CarDirection:=10;
    FlashCarList_AddNode(Test);    DrawACar(Canvas,Test.CarPoint.X,Test.CarPoint.Y,Test.CarType,Test.CarDirection);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
   LoadCarImage();
end;end.
/////////////////////////////////////////****************************FlashCarList单元文件
unit FlashCarList ; //车的总链表interfaceuses  classes,dialogs,SysUtils,Types,Graphics,Math,ExtCtrls;// Systemtype
  PFlashCarLinked=^TLinkedNode;//PCarLinked是指针型,TLinkedNode是记录型
  TLinkedNode=record
    ListName:integer;//链表名称(链表头结点特有的)    CarID:integer;//车的ID
    CarPoint:TPoint;//车的坐标
    CarSpeed:real;  //车的速度(可能用不到)
    CarType:integer;//车的类型 (可能用不到)    CarBeginNode:integer;//车出发的结点
    CarBeginNodePoint:TPoint;//坐标
    CarDirection:integer; //车的行驶方向    CarLength,CarWidth:integer;//车的长度和宽度
    CarFirstTimerTime:integer;//产生车时的Timer时间(第几次触发)    IfInCross:integer;//车是否在拐弯的过程中   拐弯开始时赋1,拐弯结束时赋0    pNextNode:PFlashCarLinked;//下一个记录的指针
  end;
{
Type
  TAllCarFlashList=class (TObject) //线路类
    //默认为Published(发行类型成员)
    LinkedHead:PFlashCarLinked;//链表头节点(标记链表只需要头节点即可)
    LinkedNodeNum:integer;//链表节点数(含头节点)
    StartNode:PFlashCarLinked;
    EndNode:PFlashCarLinked;
    LinkedList:TList;
  private
  {private declarations}
{  public
    constructor  Create; //构造函数
    destructor   Destroy;//override;//析构函数
    //Function   IfLinkedEmpty():Boolean;//检查堆栈是否为空
    function   IfLinkedEmpty():integer;//检查堆栈是否为空
    Function   GetListName():integer;  //获取链表头节点    {public declarations}
{    procedure  AddNode(CarID,CarRouteID,CarBeginNode,CarFirstTimerTime:integer;CarPoint,CarBeginNodePoint:TPoint);  //在链表末尾增加一个新结点
    function   GetPNode(CarID:integer):PFlashCarLinked;//获取指向其CarID为CarID的结点的指针
    function   IfLastNode(CarID:integer):integer;// 判断该结点是否为最后一个结点
    procedure  FreeNode(CarID:integer);//释放路口结点(只要节点的名称或索引或ID)
    //procedure TurnCorner(Canvas:TCanvas;alpha:extended;x,y:integer;Bit:TBitMap);
    //procedure DrawCar(Canvas:TCanvas;CarOnePoint:TPoint;CarType:integer;CarDirection:Extended);
end; }//constructor  Create; //构造函数
//destructor   Destroy;//override;//析构函数procedure FlashCarList_AddNode(new:PFlashCarLinked);  //在链表末尾增加一个新结点
//function   GetPNode(CarID:integer):PFlashCarLinked;//获取指向其CarID为CarID的结点的指针
function   FlashCarList_IfLinkedEmpty():Boolean;
//function   IfLastNode(CarID:integer):integer;// 判断该结点是否为最后一个结点
procedure  FlashCarList_FreeNode(DCarID:integer);//释放路口结点(只要节点的名称或索引或ID)
procedure  LoadCarImage();var
  FlashCarLinkedHead:TLinkedNode;
  Image1:Timage;
  Image2:Timage;
  Image3:Timage;
  Image4:Timage;implementation
//constructor   TAllCarFlashList.Create; //构造函数
//constructor   Create; //构造函数
function  FlashCarList_IfLinkedEmpty():Boolean;
begin
  Result:=(FlashCarLinkedHead.pNextNode=nil);
end;procedure FlashCarList_AddNode(new:PFlashCarLinked);//在链表末尾增加一个新结点
var
  p:PFlashCarLinked;
begin
  new.pNextNode:=nil;
  p:=FlashCarLinkedHead.pNextNode;
  while (p.pNextNode<>nil) do
  begin
    p:=p.pNextNode;
  end;
  p.pNextNode:=new;
end;procedure  FlashCarList_FreeNode(DCarID:integer);
var
  p,f:PFlashCarLinked;
begin
  f:=@FlashCarLinkedHead;
  p:=FlashCarLinkedHead.pNextNode;
  while(p.CarID<>DCarId) do
  begin
      f:=p;
      p:=p.pNextNode;
  end;
  f.pNextNode:=p.pNextNode;
  dispose(p);
end;
procedure LoadCarImage();
begin
   Image1:=Timage.Create(nil);
   Image2:=Timage.Create(nil);
   Image3:=Timage.Create(nil);
   Image4:=Timage.Create(nil);   Image1.Picture.Bitmap.LoadFromFile('Car1.bmp');
   Image1.Picture.Bitmap.Transparent:=true ;
   Image1.Picture.Bitmap.TransparentColor:=clred;
   Image1.Picture.Bitmap.TransparentMode:=tmFixed;   Image2.Picture.Bitmap.LoadFromFile('Car2.bmp');
   Image2.Picture.Bitmap.Transparent:=true ;
   Image2.Picture.Bitmap.TransparentColor:=clred;
   Image2.Picture.Bitmap.TransparentMode:=tmFixed;   Image3.Picture.Bitmap.LoadFromFile('Car3.bmp');
   Image3.Picture.Bitmap.Transparent:=true ;
   Image3.Picture.Bitmap.TransparentColor:=clred;
   Image3.Picture.Bitmap.TransparentMode:=tmFixed;   Image4.Picture.Bitmap.LoadFromFile('Car4.bmp');
   Image4.Picture.Bitmap.Transparent:=true ;
   Image4.Picture.Bitmap.TransparentColor:=clred;
   Image4.Picture.Bitmap.TransparentMode:=tmFixed;
end;end.这个程序编译的时候没有出错,可是运行的时候但我按Button时就出了问题,就指到
procedure FlashCarList_AddNode中的  while (p.pNextNode<>nil) do 这一行,可是我也不知道错误到底出现在哪里,还有那个链表的创建我没有使用类哦,编译的时候没有出错,没有用到
//constructor   TAllCarFlashList.Create; //构造函数
//constructor   Create; //构造函数
不知道行不行呢?请高手帮帮忙,我这里到底出错在哪里?