我想知道为什么在运行以下代码时,t
的值在调用get
之后与以前相同。
我觉得问题是第11行在c = tmp
处的重新分配-但希望有人能指出我正确的方向吗?
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
BOOL get(COMPUTER_NAME_FORMAT f, WCHAR* c) {
DWORD s = 0;
WCHAR* tmp = NULL;
GetComputerNameExW(f, tmp, &s);
tmp = (WCHAR*)realloc(tmp, sizeof(WCHAR) * s);
GetComputerNameExW(f, tmp, &s);
c = tmp;
return TRUE;
}
void _tmain(int argc, _TCHAR* argv[])
{
WCHAR* t = TEXT("thisisatest");
BOOL res = get(ComputerNameDnsHostname, t);
printf("%Ls\n", t);
}
为简洁起见,上面的代码已删除了错误处理代码。另外,我怀疑在两次调用GetComputerNameExW()之间存在争用情况。
答案 0 :(得分:1)
您只是在t
函数中修改main的get(COMPUTER_NAME_FORMAT f, WCHAR* c)
指针的参数副本。
效果不会传播到get
之外。
您正在将tmp的值分配给在get
返回后丢失的临时指针。
通过c
中的WCHAR** c
作为get
传递{1>}:
BOOL get(COMPUTER_NAME_FORMAT f, WCHAR** c){
//stuff
tmp = (WCHAR*)realloc(tmp, sizeof(WCHAR) * s);
*c=tmp;
//other stuff
}