当前位置: 代码迷 >> 驱动开发 >> 查看下列字符串处理是否有有关问题
  详细解决方案

查看下列字符串处理是否有有关问题

热度:115   发布时间:2016-04-28 11:14:35.0
查看下列字符串处理是否有问题
下边的代码有错误吗?

  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

  相关解决方案