读书人

小弟我这段代码居然存在内存泄漏?

发布时间: 2012-02-06 15:52:44 作者: rapoo

我这段代码居然存在内存泄漏??
我这段代码居然存在内存泄漏??

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 最大会是多少?
单次发送不要太多,太多了可以分割去发送
[解决办法]
加到流中,一次次读取,分段控制发送。
[解决办法]
顶你。。

读书人网 >C++ Builder

热点推荐