freemem不能释放指针的问题,返回invalid pointer operation异常。怎么办?(100分)

  • 主题发起人 主题发起人 satanmonkey
  • 开始时间 开始时间
S

satanmonkey

Unregistered / Unconfirmed
GUEST, unregistred user!
代码大致如下
var
tmpMimeType,tmpURL:pwidechar;
MHTBody:TStringlist;
currURL,URL,title,filename,content,MimeType:string;
BodyIndex,ThreadID:DWORD;
i:integer;
haveIndex:boolean
...
getmem(tmpMimeType,sizeof(widechar)*256);
getmem(tmpURL,sizeof(widechar)*1024);
if GetCatheStringFromUrl(URL,content)=S_OK then
begin
//确定mime类型
StringToWideChar(url,tmpURL,sizeof(widechar)*256);
FindMimeFromData(nil,tmpURL,pwidechar(content),length(content),nil,0,tmpMimeType,0);
Mimetype:=widechartostring(tmpMimeType);
//添加
...
...
end;
freemem(tmpMimeType,sizeof(widechar)*256)
//该句出错
freemem(tmpURL,sizeof(widechar)*1024);
 
老兄,你不会是释放过了,再次释放吧,看你的错误信息
好像是如此。
 
我肯定没释放过,这么低级的问题不会出的。
 
tmpMimeType的位置被你移动了![:D]
 

getmem(tmpMimeType,sizeof(widechar)*256);
pType:=tmpMimeType;
最后去
FreeMem(pType);
如果还出错,那就是你的内存被释放了,检查你的代码先...
 
嗯,有可能
 
to 张无忌
getmem(tmpMimeType,sizeof(widechar)*256);
pType:=tmpMimeType;
最后去
FreeMem(pType);
这个办法试了,照样出错。
我仔细检查过,没什么地方释放过这个指针。
我这个过程是在dll中的,会不是兼容的问题?
 
呵呵,你没释放过。但你调用的过程可以释放它,你不是把它
当参数穿进去了吗.
 
哪个函数是urlmon.dll里的,如果真是他释放掉的。我是不是可以不用自己释放了?
 
你在FindMimeFromData中都干了什么?
 
FindMimeFromData是urlmon单元里的,delphi字带的。
功能是确定给顶url的mime类型
 
去掉getmem和freemem,改用setlength试试。
要注意string类型是数组从1开始的,位置0放的是长度,在返回后
再次调用setlength,实在不行换pchar试试。
 
自己搞定了,平均分分
 
后退
顶部