考虑以下三个C函数:
[PI] int * g (void)
{
int x= 10;
return (&x);
}
[P2] int * g (void)
{
int * px;
*px= 10;
return px;
}
[P3] int *g (void)
{
int *px;
px = (int *) malloc (sizeof(int));
*px= 10;
return px;
}
以上三个函数中的哪个可能会导致指针出现问题? (GATE 2001)
(A)仅P3
(B)仅P1和P3
(C)仅P1和P2
(D) P1,P2和P3答案: (C)
说明:在P1中,指针变量x是g()的局部变量,而g()返回指向该变量的指针。 g()返回后x可能消失,因为x存在于堆栈中。因此,&x可能变为无效。
在P2中,为指针变量px分配了一个值,而没有为其分配内存。
P3正常工作。使用malloc()将内存分配给指针变量px。因此,px存在于堆中,即使g()返回后也仍然存在于内存中,因为它在堆中。这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。