📜  C |动态内存分配|问题2

📅  最后修改于: 2021-05-26 00:00:42             🧑  作者: Mango

考虑以下三个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基础课程》。