C | Dynamic Memory Allocation | Question 3

Output?

filter_none

edit
close

play_arrow

link
brightness_4
code

# include<stdio.h>
# include<stdlib.h>
   
void fun(int *a)
{
    a = (int*)malloc(sizeof(int));
}
   
int main()
{
    int *p;
    fun(p);
    *p = 6;
    printf("%d\n",*p);
    return(0);
}

chevron_right


(A) May not work
(B) Works and prints 6


Answer: (A)

Explanation: The program is not valid. Try replacing “int *p;” with “int *p = NULL;” and it will try to dereference a null pointer.
This is because fun() makes a copy of the pointer, so when malloc() is called, it is setting the copied pointer to the memory location, not p. p is pointing to random memory before and after the call to fun(), and when you dereference it, it will crash.
If you want to add memory to a pointer from a function, you need to pass the address of the pointer (ie. double pointer).

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up