关于完成端口的内存管理,非常奇怪的现象!(100分)

  • 主题发起人 xiaohongna
  • 开始时间
X

xiaohongna

Unregistered / Unconfirmed
GUEST, unregistred user!
这次彻底郁闷住了! 闲话不说~ 关于完成端口!
// 和新连接绑定的数据结构
PSinglesocket=^Tsinglesocket;
Tsinglesocket= Record
socket:Tsocket;
end;
//单任务结构
PSingleJob=^TsingleJob;
TSingleJob=packed Record
Overlapped: OVERLAPPED;
DataBuf: TWSABUF;
BytesSEND: DWORD;
Buffer: array [0..1024] of CHAR;
end;
-----------
创建完成端口,工作线程就省略了

当有新连接以后 singlesock:psinglesocket; singlejob:psinglejob;
new(singlesock);
singlesock^.socket:=Clientsocket;
if CreateIocompletionport(Clientsocket,FcompletionPort,Dword (singlesock),0)=0 then
begin
dispose(singlesock);
continue;
end;
这个地方绑定绑定数据结构~~
然后投递一个WsaRecv(.。。。.@Singjob^.overlapped,nil) 也就是上面的那个

这些都没有问题~~

然后工作线程里面 GetQueuedCompletionStatus() 返回了 singlesock和singjob的指针,设置断点察看指针和上面New分配的指针相同,而且buffer里面的数据也是客户端发送过来的。接收到的字节和发送的一样。

现在问题是:返回的这两个结构都不能访问! 只要访问就出现莫名其妙的内存访问错误,什么OX0000008, 就这些完全不靠边的错误。 断点鼠标放在buffer上面能看到发送过来字符串,但是你用copy()一下就访问错误了。

我就不明白了,什么相同的指针绑定以后再获得就不能使用了那。 指针指向肯定是相同的,断点察看过多次了,可就是出现内存访问错误。
 
相关代贴出来吧,不然很难帮你
 
代码太多,怕贴出来也没有人认真看(因为我就是这样,如果别人的帖子代码多就不看了),所以就没有贴出来。

问题还是没有找到,但发现很奇怪,换台电脑运行就没有问题了,同一个EXE文件。

越来越糊涂了。
 
问题已经找到了。
还是我犯的错误,一个地方的判断符写错了。

哥们顶我的帖子也算有缘分。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
778
SUNSTONE的Delphi笔记
S
顶部