小弟新手,请问为何释放内存时出错:源码:
var
lpBuffer:PChar;
nSize:DWORD;
begin
lpBuffer := stralloc(255*sizeof(char));
nsize := 254;
getcomputername(lpbuffer,nsize);
lpbuffer:=char(leftstr(string(lpbuffer),nsize));
button1.caption:=lpbuffer;
//以上都没有错误,button1.caption的显示也正确,下面这句出错
//出错说:非法使用指针 inviald use pointer
strdispose(lpbuffer);
end;
var
lpBuffer:PChar;
nSize:DWORD;
begin
lpBuffer := stralloc(255*sizeof(char));
nsize := 254;
getcomputername(lpbuffer,nsize);
lpbuffer:=char(leftstr(string(lpbuffer),nsize));
button1.caption:=lpbuffer;
//以上都没有错误,button1.caption的显示也正确,下面这句出错
//出错说:非法使用指针 inviald use pointer
strdispose(lpbuffer);
end;
解决方案 »
- 奇怪的问题(程序有错,不能完成调用)
- dxdbgrid怎样把内容设置成只读
- 急!!!!FastReport 主副表打印,怎样设置预览时只有当前记录?
- 我用下面这个函数来判断一个字符串是否可以转化为整数,可是总是报错,请指点
- 想认识几个Delphi朋友共同进步,来者有分!!!
- 权威回答Yes or No (给分)
- 版主,zswang,我刚看了My_first (海浪) 的几个贴子,给的什么分?我没搞懂?
- 进来的话对你一定有帮助,也一定有分加--一个关于指针的话题
- 有可以完成Object Inspector功能的控件吗?
- 请问高手如何用Delphi做ASP组件?
- 为什么我用这个函数改变屏幕的分辨率后,任务栏就没有了???请高手指教
- help
用GetMem或AllocMem和FreeMem的
例如:
getmem freemem
globalalloc globalfree
stralloc strdispose
strnew strdispose
freemem
就行
procedure GetMem(var P: Pointer; Size: Integer);AllocMem
function AllocMem(Size: Cardinal): Pointer;FreeMem
procedure FreeMem(var P: Pointer[; Size: Integer]);
lpBuffer:PChar;
nSize:DWORD;
begin
lpBuffer := stralloc(255*sizeof(char));
nsize := 254;
getcomputername(lpbuffer,nsize);
lpbuffer:=pchar(lpbuffer);
button1.caption:=lpbuffer;
strdispose(lpbuffer);
end;以上執行沒錯>>lpbuffer:=char(leftstr(string(lpbuffer),nsize));
這句有問題
檢查可用如下:
ShowMessage(IntToStr(Integer(lpbuffer)));
lpbuffer:=char(leftstr(string(lpbuffer),nsize));
ShowMessage(IntToStr(Integer(lpbuffer)));
//檢查執行前後的指針是不是被改了
var
lpBuffer:PChar;
nSize:DWORD;
begin
lpBuffer := stralloc(255*sizeof(char));
nsize := 254;
getcomputername(lpbuffer,nsize);
//lpbuffer:=char(leftstr(string(lpbuffer),nsize));
button1.caption:=char(leftstr(string(lpbuffer),nsize));
//这样就没有改变指针的地址了
//button1.caption:=lpbuffer;
strdispose(lpbuffer);
end;