【发布时间】:2017-08-12 12:52:53
【问题描述】:
我编写了以下代码,其中我将 WCHAR** 引用传递给函数,以便将其归档到函数中。在函数内部,我正在填充这个二维数组。我正在尝试通过引用传递来完成这项工作。
BOOL get_file_names(WCHAR** outname)
{
WCHAR **outhandlername = NULL;
if (get_all_the_file_handelers( &outhandlername) > 0)
{
(*outname)[0] = *outhandlername[0];
}
return ret;
}
int get_all_the_file_handelers(WCHAR** outhandleName )
{
for (i = 0; i < 10; i++)
{
WCHAR *handleName = get_handle_name(handle, i);
outhandleName = (WCHAR**)realloc(outhandleName, sizeof(WCHAR)*(10 + 1));
(*outhandleName) = (WCHAR*)realloc(*outhandleName, sizeof(WCHAR)*(1024));
*outhandleName = handleName;
}
return 0;
}
但这似乎不起作用,任何人都可以帮助我了解在这种情况下,WCHAR 数组的引用传递是如何工作的。当我有WHCAR** 时,将&WCHAR 传递给第二个函数是正确的,在第二个函数中我应该如何为二维WCHAR 数组分配值
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR *outhandlename=NULL;
get_file_names(&outhandlename);
DBGLOG("handler name %ls", outhandlename);
return 0;
}
BOOL process_search_file_handle( WCHAR** str)
{
*str = (WCHAR*) malloc(1024);
*str = L"TestName";
return true;
}
BOOL get_file_names(WCHAR** outname)
{
WCHAR **outhandlername = NULL;
if (get_all_the_file_handelers( &outhandlername) > 0)
{
*outname = outhandlername[0];
DBGLOG("outhandlername value %ls", outhandlername[0]);
DBGLOG("str value %ls", *outname);
}
return true;
}
【问题讨论】:
-
1) 没有二维数组。 2) 有什么理由不使用 C++ 功能?
-
其实没理由,我是c++新手,这恰好是我的第一个项目,虽然这是可能的,这就是我选择它的原因。我可以在这里采取什么其他方法
-
您不是通过引用传递,而是通过值传递...
&运算符是地址运算符。如果您在对get_all_the_file_handelers的函数调用中将其删除,代码可能会执行您的预期,但是,我不确定函数内部分配的内存如何知道如何释放自己。 -
` outhandleName = (WCHAR**)realloc(outhandleName, sizeof(WCHAR)*(10 + 1));` 分配 22 个字节,然后转换为指针类型。指针的大小与
WCHARs 不同。也许你的意思是sizeof(WCHAR*)。接下来,(*outhandleName) = (WCHAR*)realloc(*outhandleName, sizeof(WCHAR)*(1024));尝试重新分配*outhandleName指向的内容……但从来没有第一次分配,所以这很奇怪。但即使成功了,*outhandleName = handleName;也会用来自handleName的值覆盖指针,从而泄漏之前的分配。 -
当一个人进入指向指针的指针时......事情就会变得烦人。如果您是 C++ 新手,那么在该级别工作会过于复杂。尝试使用可以轻松调整大小的容器并自行处理细节,例如
std::vector
标签: c++ pointers pass-by-reference wchar