我想知道为什么以下两个函数会返回不同的结果: GetPtr的结果始终为NULL,而GetPtr2返回指向参数的指针,即预期的行为。
#include <stdio.h>
unsigned char ** GetPtr(unsigned char *ptr)
{
return &ptr;
}
unsigned char ** GetPtr2(unsigned char *ptr)
{
unsigned char **ptr2 = &ptr;
return ptr2;
}
int main()
{
unsigned char *test = (unsigned char *) malloc(10 * sizeof(unsigned char));
printf("%p \n", GetPtr(test));
printf("%p \n", GetPtr2(test));
free(test);
return 0;
}
提前感谢您的帮助!
答案 0 :(得分:0)
unsigned char ** GetPtr(unsigned char *ptr)
{
return &ptr;
} // <-- scope of ptr ends here
您正在使用超出范围的变量的地址。正如Monty Python短剧所拥有的那样,这是一只前鹦鹉。
此函数返回局部变量的地址。当调用者收到该地址时,其地址的变量将不再在范围内。