下边的代码有错误吗?
UNICODE_STRING foo;
if(bArriving)
{
RtlInitUnicodeString(&foo,L"Hello world!");
}
else
{
ANSI_STRING bar;
RtlInitAnsiString(&bar,"Goodbye")
RtlAnsiStringToUnicodeString(&foo,&bar,TRUE);
}
....
RtlFreeUnicodeString(&foo);
是不是可以说对于ANSI_STRING来说,改程序没有提供释放的代码呀
------解决方案--------------------
这是局部定义的变量,生命周期就在它最近的大括号之内,运行完后,会自动释放
相当于入栈再出栈
------解决方案--------------------
不存在内存泄漏
但是这个代码存在问题,这是MSDN里边函数RtlInitUnicodeString的注释:
DestinationString is initialized to point to SourceString
也就是说bArriving的时候是没有申请内存的,所以不可以调用RtlFreeUnicodeString
RtlAnsiStringToUnicodeString(&foo,&bar,TRUE); 的时候申请了内存的,才需要调用RtlFreeUnicodeString