请参阅以下代码和我对结果的解释。
void f (int * p, int * q)
{
p = q;
*p = 2;
}
int i = 0;
int j = 1;
int main ()
{
f(&i, & j);
printf("%d %d\n", i, j);
return 0;
}
我们有两个全局变量i
和j
,我们将这两个变量的指针传递给函数f
。当我们执行p = q
时,我们实际上忽略了i
的引用,我们得到两个指针,即p
和q
都指向j
。然后当我们*p = 2
时,我们实际上将j
的值更改为2
。
但是,由于我们在步骤i
中丢失了p = q
的引用,因此在主程序中,打印的i
的值是全局变量{{1 }}。因此,我们得到的结果为0
和i = 0
。
请告诉我这是否是一个正确的解释...
现在另一个问题是,当我们在函数f中执行j = 2
时,它是否会创建内存泄漏,因为先前由p指出的值将无法访问。
答案 0 :(得分:0)
在函数中执行p = q
只会更改局部变量p
,因此i
不受影响,&i
中的main
仍然与之前相同调用功能。此外,如果您使用malloc()
或calloc()
而没有相应的free()
(包括等效使用realloc()
),则只能造成内存泄漏。
否则,您的解释是正确的。