I observed that in line int *x = malloc(sizeof(int)); this code is trying to convert a void* into a int* without using proper typecasting. So according to me answer should be option A. But in official GATE-2017 exam answer key, answer is given D. So am i wrong ? how ?
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int *assignval(int *x, int val){
  *x = val;
  return x;
}
void main(){
    clrscr();
    int *x = malloc(sizeof(int));
    if(NULL==x) return;
    x = assignval(x,0);
    if(x){
        x = (int *)malloc(sizeof(int));
        if(NULL==x) return;
        x = assignval(x,10);
    }
    printf("%d\n",*x);
    free(x);
    getch();
}
- (A) compiler error as the return of malloc is not typecast appropriately.
- (B) compiler error because the comparison should be made as x==NULL and not as shown.
- (C) compiles successfully but execution may result in dangling pointer.
- (D) compiles successfully but execution may result in memory leak.
In my opinion option D is only correct when
int *x = (int *)malloc(sizeof(int));is used.
 
     
     
     
     
     
    