我的过程定义了几个pchar型的指针
然后分配内存
getmem(p1,256);
getmem(p2,256);
getmem(p3,256);
...
经过一系列操作后
发现p1,p2被优化了,
释放时
freemem(p1);
freemem(p2);
结果出错,说无效指针操作。请问怎么办?

解决方案 »

  1.   

    调试信息说
    variable 'p1' inaccessible here due to optimization
    variable 'p2' inaccessible here due to optimization
      

  2.   

    我用C++时也碰到过该类问题,我试过了delphi也一样。
    当你给他分配内存之前,你freemem()是没问题的,
    当分配完以后,你freemem()是没问题的,
    然后你再freemem()就出错了,可能是该内存已经释放掉了,
    你再去释放的话,他就找不着了或者这一段内存已分配给
    别人了,而无法操作(我也不太明白),
    不过,我想你可能不小心freemem()了两次
      

  3.   

    我在DELHPI7下试过了,不会出错,但如果
    p1 ,p2 两个指针的值被修改,你再用FreeMem去释放就会出错。
    看看p1,p2两个指针的值与初始值是否一样。
    var
      p1,p2,p3 : PChar;
    begin
      getmem(p1,256);
      getmem(p2,256);
      getmem(p3,256);
      copymemory(p1,Pchar('ha ha ha'),9);
      //Inc(p1);修改p1,p2的值,就会报无效的指针操作错误
      //Inc(p2);
      freeMem(p1);
      freeMem(p2);
      freeMem(p3);
    end;
      

  4.   

    var p1,p2:pchar;
        str:string;
    getmem(p1,256);
    getmem(p2,256);
    str:='qqq';
    p1:=pchar('www');
    str:=str+p1;     //此处该如何写?
    showmessage(str);
    freemem(p1);
    freemem(p2);
      

  5.   

    study!
    不知道怎么解决?
      

  6.   

    我经常使用GetMem(),FreeMem对操作,根本不会出现你们上述的问题.一定是你们在申请到内存之后进行了错误的操作.
    Var
      P1, P2, P3 : pChar;
    Begin
      GetMem(P1, 255);
      P1 := 'ABCD'; //错误的赋值方法
      FreeMem(P1);  //这种情况下100%会出错.  GetMem(P2, 5);
      GetMem(P3, 255);
      StrCopy(P2, '123456789ABCDEFFGGGG');  //赋值超过了长度.
      FreeMem(P2); //不会出错
      FreeMem(p3); //一般情况下会出错.因为P3的内存紧接着P2后面.而刚才对P2赋值超出了空间,也就是写到P3的配置上了.//另外一种对pChar的赋值方法. P1[0] := 'A'; P1[1] := 'B'End;
      

  7.   

    new(...)
    getmem(...)
    dispose(...)