Consider the following three C functions: [P1] int *g(void) { int x = 10;…
2001
Consider the following three C functions:
[P1]
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;
}
Which of the above three functions are likely to cause problems with pointers?
- A.
Only P3
- B.
Only P1 and P3
- C.
Only P1 and P2
- D.
P1, P2 and P3
Attempted by 38 students.
Show answer & explanation
Correct answer: C
The correct answer is Option C (Only P1 and P2). In P1, x is a local automatic variable, so returning &x gives the caller a dangling pointer after the function returns. In P2, px is declared but never initialized to point to valid memory; dereferencing *px is undefined behavior. In P3, memory is allocated using malloc before assigning through px, and returning that heap pointer is valid, although the caller should free it later.