b_send: array of Byte;
SetLength(b_send,4);
len :=Htonl(len);
p_int := @len;
Move(p_int^,b_send,SizeOf(Byte) * 4);运行后会发生内存错,如果在move里改成b_send[0],就没有内存错,但是b_send的值就不正确。请高手帮助。谢谢。
SetLength(b_send,4);
len :=Htonl(len);
p_int := @len;
Move(p_int^,b_send,SizeOf(Byte) * 4);运行后会发生内存错,如果在move里改成b_send[0],就没有内存错,但是b_send的值就不正确。请高手帮助。谢谢。
解决方案 »
- Delphi编译带毒
- 奇怪,在delphi2007中无法改变Label控件的颜色(不是字体颜色)!
- 支持Unicode类似Excel风格的表格控件
- tabcontrol上按钮的图标如何更换,他是通过TStrings添加按钮的,看来是不会有imageindex的了!请各位大侠指点!
- 怎樣退出運行狀態
- 关于数据优化的问题!
- 在请教个问题,怎么在stringgrid控件中,将字体居中显示呢?
- Dblookupcombobox的使用,
- 如何通过ADOQuery修改EXCEL文件中的数据记录?
- OLE容器中显示Word文档。可是这个东西可以修改,还显示了工具条。我该怎么办呢?
- 用delphi如何获取寄存器的值?
- delphi 2010 简单小问题,请教
move是地址传递吧。我直接用len做move的参数也不行,也报内存错。
报这个东东
先生成一个ms := TMemoryStream.Create;
之后将一个数据放到数组中Move(p_int^,b_send,SizeOf(Byte) * 4);
再把数组写入到流中ms.WriteBuffer(b_send,4);
之后发送流ms.Position := 0;
Socket.SendStream(ms);
但是最后ms.Free;也报内存错。
所以现在,move也报,ms.free也报。都是内存错。请帮忙看看。谢谢。
改成
Move(p_int^,b_send[0],SizeOf(Byte) * 4);ms.free这个内存错跟网络有关,Socket.SendStream(ms); 这句还没有发出去,就执行下一句free导致报错,不用Free就会内存泄露,所以发送数据尽量不用SendStream
b_send: array of Byte;
begin
SetLength(b_send,4);
len :=Htonl(len);
PInteger(@b_send[0])^ := Len;
......
//读取
Len := PInteger(@b_send[0])^;
end;如果你要向流中写内容,那连数组都省了
ms.Write(Len, SizeOf(Len))
这就可以了,读的时候
ms.Read(Len, SizeOf(Len));
a: array of Byte;
b: Integer;
begin
SetLength(a, 4);
PInteger(@a[0])^ := 224;
b := 12234;
Move(b, a[0], 4);
b := 0;
Move(a[0], b, 4);
showmessage(IntToStr(b))
end;