我将指针作为参数传递给函数。在函数内部我改变它 - >它已经改变了。但是在输出与函数调用之前相同之后。指针没有改变。怎么了?
void GetFrom(PVOID lpBuffer){
lpBuffer = malloc(12);
memset(lpBuffer, 0, 12);
printf("%p",pointer); // 0000028D46DECE50
}
PVOID pointer = 0x0;
printf("%p",pointer); // 000000C2628FEFE4
GetFromMap(pointer);
printf("%p",pointer); // 000000C2628FEFE4
在调试中,我看到指针的值在函数内部发生了变化。
答案 0 :(得分:1)
请注意lpBuffer = malloc(12)
只更改局部变量lpBuffer
的值,但这对已传递给GetFrom
的值的变量没有影响。要更改调用者变量中指针的值,需要将指针传递给该指针。
void GetFrom(PVOID *lpBuffer){
*lpBuffer = malloc(12);
memset(*lpBuffer, 0, 12);
printf("%p",*lpBuffer); // !=0x0
}
PVOID pointer = 0x0;
GetFromMap(&pointer);
printf("%p",pointer); // should be != 0x0
BTW:而不是malloc
和后续的memset to 0
,您可以使用calloc
,0
隐含地填充已分配的内存 -
答案 1 :(得分:0)
在函数内部我改变它 - >它已经改变了。
不完全是:已更改的“它”是指针的副本,而不是已传递的原始指针。
但是输出与函数调用之前相同。指针没有改变。
那是因为您更改了副本,而指针保留了原始值。
就修复这种情况而言,C语言中有一个选项,C ++中有两个选项: