gpt4 book ai didi

c++ - LocalAlloc 和 LocalRealoc 用法

转载 作者:行者123 更新时间:2023-11-27 22:30:46 24 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C++ Windows Mobile 6 应用程序,我在其中使用 FindFirst()/FindNext() 样式 API 来获取项目集合。我不知道有多少项目会提前列入 list 。所以,我想为这些项目动态分配一个数组。

通常,我会使用 std::vector<> ,但是,出于其他原因,这不是此应用程序的选项。所以,我正在使用 LocalAlloc()LocalReAlloc() .

我不清楚的是这个内存应该标记为固定的还是可移动的。无论哪种方式,应用程序都运行良好。我只是想知道什么是“正确的”。

int count = 0;
INFO_STRUCT* info = ( INFO_STRUCT* )LocalAlloc( LHND, sizeof( INFO_STRUCT ) );
while( S_OK == GetInfo( &info[ count ] )
{
++count;
info = ( INFO_STRUCT* )LocalRealloc( info, sizeof( INFO_STRUCT ) * ( count + 1 ), LHND );
}

if( count > 0 )
{
// use the data in some interesting way...
}

LocalFree( info );

谢谢,保罗H


编辑:响应者(并非不合理地)对使用 LocalAlloc() 而不是其他更好的选择挂断了电话。因此,我将提供更多背景信息。

这段代码是从 RAPI 可调用 DLL 中执行的。因此,在这种情况下,它看起来更像这样:

FOO_API int RapiInvokable_Foo( DWORD /*cbInput*/, 
BYTE* /*pInput*/,
DWORD* pcbOutput,
BYTE** ppOutput,
IRAPIStream* /*pStream*/ )
{
int count = 0;
INFO_STRUCT* info = ( INFO_STRUCT* )LocalAlloc( LPTR, sizeof( INFO_STRUCT ) );
while( S_OK == GetInfo( &info[ count ] )
{
++count;
info = ( INFO_STRUCT* )LocalRealloc( info, sizeof( INFO_STRUCT ) * ( count + 1 ), LHND );
}

*ppOutput = ( BYTE* )info;
*pcbOutput = sizeof( INFO_STRUCT ) * ( count + 1 );
return S_OK;
}

来自CeRapiInvoke()文档:

应用程序应使用 LocalAlloc 函数为 pInput 参数分配内存。调用者负责释放 pInput。系统为 ppOutput 参数分配内存。当应用程序完成缓冲区后,它应该使用 LocalFree 函数释放内存。

最佳答案

根据 MSDN,使用本地函数没有任何好处:http://msdn.microsoft.com/en-us/library/aa366723(VS.85).aspx .为什么不只使用常规的 malloc 和 free 或 new 和 delete。它们可能是您的最佳选择。

关于c++ - LocalAlloc 和 LocalRealoc 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com