小弟我这段代码居然存在内存泄漏?
我这段代码居然存在内存泄漏??我这段代码居然存在内存泄漏??C/C++ codebool SendText(String TcpText){boo
我这段代码居然存在内存泄漏??
我这段代码居然存在内存泄漏??
C/C++ codebool 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 最大会是多少?
单次发送不要太多,太多了可以分割去发送
[解决办法]加到流中,一次次读取,分段控制发送。
[解决办法]顶你。。