我这段代码居然存在内存泄漏??
我这段代码居然存在内存泄漏??
- C/C++ code
bool SendText(String TcpText){ bool Result = false; AnsiString TcpString = TcpText; if ( ! TcpString.IsEmpty() ) { __int64 SendSize = TcpString.Length(); AnsiString SendLength = IntToStr(SendSize); char* SendBuffer = new char[SendSize]; memcpy(SendBuffer, TcpString.c_str(), SendSize); sockaddr_in service; Result = ::sendto(SocketHandle, SendLength.c_str(), SendLength.Length()+1, 0, (struct sockaddr*)&service, sizeof(service)) >0 && ::sendto(SocketHandle, SendBuffer, SendSize, 0, (struct sockaddr*)&service, sizeof(service)) >0; delete [] SendBuffer; } return Result;}[解决办法]
memcpy那一句恐怕有猫腻啊。
[解决办法]
怎么判断出内存泄露的
[解决办法]
必要用 __int64 , AnsiString 也不支持那的串。
AnsiString 的度 int型. int正 --> __int64 然後再 unsigned int , 不生,但用 __int64 是多余,害得看程序的人:不溢出啊。
char* SendBuffer = new char[SendSize];
Result = ::sendto(SocketHandle ....);
delete [] SendBuffer ;
在 sendto 生常的候,内存泄露。而sendto Socket操作,容易有常出。
用std::auto_ptr ,可解因常而泄露的。
[解决办法]
delete [] SendBuffer;这句没有被执行到,在上面函数调用的时候出现异常,或跳到其他地方去了
[解决办法]
直接操作内存流行不?
[解决办法]
不知道你的 char* SendBuffer = new char[SendSize];
这个SendSize 最大会是多少?
单次发送不要太多,太多了可以分割去发送
[解决办法]
加到流中,一次次读取,分段控制发送。
[解决办法]
顶你。。