我使用了Items中的Objects对象,如下所示:
//添加
var 
 p :PChar;
 str :String;
begin
    str := '12345678';//str := '中中中中中中';
    GetMem(p,Length(str));
    StrPCopy(p,str);
    ComboBox.Items.AddObject('aaaa',TObjects(p));end;
//释放;
var 
   p :PChar;
begin
   p := PChar(ComboBox.Items.Objects[0]); 
   FreeMem(p,Length(p));//FreeMem(PChar(ComboBox.Items.Objects[0]));
end;
如上所示:如果我的str变量取值是:str := '中中中中中中';则不会报地址错误
          但是如果是:str := '12345678';就会报地址错误,反正只要是值是数据表达式且达到一定长度就会报错,但也就10个字符长度而已呀!我用
FreeMem(p,Length(p));
或FreeMem(PChar(ComboBox.Items.Objects[0]));都不行(总是Run Error 26...,明显的内存错误!!!)     不要告诉我用Record数据类型的指针,更不要告诉我用TStringList哟!
     是内存分配时的长度问题,还是释放时的FreeMem问题呀!
    跪求各位大侠指点迷津,谢谢先,解决问题100分双手捧上!!!

解决方案 »

  1.   

    没有问题吧,容我试一下1,你的释放代码写在那里了
    2,ComboBox.Items.AddObject('aaaa',TObjects(p));TObjects是什么东东
      

  2.   

    是不是如果是数值的话被delphi优化了?
      

  3.   

    俺試了試、也報错!
    ”EInvalidPoint Class発生例外、無効的指针操作”建议用↓
     ComboBox1.Items.AddObject('aaaa',TObject(PChar('12345678')));
     ComboBox1.Items.AddObject('bbbb',TObject(PChar('中中中中中中')));