pk_mac//怎么定义的?无法帮你调试

解决方案 »

  1.   

    To CoolSlob:
    出错信息是:
    Access violation at address 000000135. Read of address 00000135To orent_c 
    函数可以这么调用的!
      

  2.   

    还有两个函数是:
    function upk_mac(x:Integer):Integer;
    begin
       Result:=(x or $30);
    end;
    function pk_mac(x:Integer):Integer;
    begin
       Result:=(x and $0F);
    end;
      

  3.   

    通过仔细阅读你的程序,我知道你的问题出在哪里了。
    你的问题在于你的定义:
    function packing(p3:pchar;len:Integer;bitmap:PChar):Integer;
    而你在调用程序里又要使用bitmap;
    当然BITMAP不会出现你想要的值,因为你使用的只是值传递。
      

  4.   

    To mrzho
    PChar 是指针呀,相当域C中的char * ,不就是传地址了吗?你认为应该怎么做呢?
      

  5.   

    To liujc
    运行的时候才出错的!编译不会错!
      

  6.   

    bitmap[8]:=#0;错了

    procedure TForm1.Button1Click(Sender: TObject);
    var
       tmp:array[0..15] of char;
       bitmap:array[0..8] of char;//这里
       x:string;
       i:Integer;
    begin
       StrPCopy(tmp,'01ff000000000000');
       FillChar(bitmap,8,0);
       packing(tmp,16,bitmap);   for i:=0 to 7 do
          x:=x+Format('%.2x',[ord(bitmap[i])]);   ShowMessage(x);
    end;
      

  7.   

    错在这里: bitmap[8]:=#0;
    改为:bitmap[7]:=#0;
      

  8.   

    bitmap:array[0..7] of char
    改为
    bitmap:array[0..8] of char
      

  9.   

    bitmap[8]:=#0;  是错了,但是实质性错误不在这里,我把函数调用堆栈方式改为重右到左(即加个 stdcall)问题解决了!但是我还是不明白为什么会这样?望高手给以解答!
      

  10.   

    PChar是NULL式的字符串,你要从头访问的时候,你必须保证结尾有一个字符/0但是从你上面的程序看呢,你并没有给结尾方那个字符,所以当你访问的时候内存会越界访问,虽然你感觉你是使用for循环控制的,但是对与pchar字符串,跟while循环一样,如果没有发现null,那么就一直往下读,那样的话,不出现内存访问错误才怪呢!当你使用了stdcall的时候,系统的函数调用作了保护,当发现内存访问越界的时候,自动就返回了,所以不会出错!但是你的程序的确有问题,对于pchar的操作,你应该使用while 循环
      

  11.   

    要不你丢掉你的STRCOPY就用一个循环来付值试试。