首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-02-06 
我这段代码居然存在内存泄漏??我这段代码居然存在内存泄漏??C/C++ codebool SendText(String TcpText){boo

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

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

热点排行