我使用了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分双手捧上!!!
//添加
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分双手捧上!!!
2,ComboBox.Items.AddObject('aaaa',TObjects(p));TObjects是什么东东
”EInvalidPoint Class発生例外、無効的指针操作”建议用↓
ComboBox1.Items.AddObject('aaaa',TObject(PChar('12345678')));
ComboBox1.Items.AddObject('bbbb',TObject(PChar('中中中中中中')));