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.