Find Output Of Program

Question 1 :

What will be the output of the program?

#include < stdio . h >
#include < stdlib . h >

int main()
{
    int *p;
    p = (int *) malloc (20); /* Assume p has address of 1314 */
    free(p);
    printf("%u", p);
    return 0;
}


A). 1314
B). Garbage value
C). 1316
D). Random address
Answer : Option A

Question 2 :

What will be the output of the program (16-bit platform)?

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


A). 4
B). 2
C). 8
D). Garbage value
Answer : Option B

Question 3 :

What will be the output of the program?

#include < stdio . h >
#include
int main()
{
    char *s;
    char *fun();
    s = fun();
    printf("%s\n", s);
    return 0;
}
char *fun()
{
    char buffer[30];
    strcpy(buffer, "RAM");
    return (buffer);
}


A). 0xffff
B). Garbage value
C). 0xffee
D). Error
Answer : Option B

Explanation :

The output is unpredictable since buffer is an auto array and will die when the control go back to main. Thus s will be pointing to an array , which not exists.


Question 4 :

What will be the output of the program?

#include < stdio . h >
#include < stdlib . h >
int main()
{
    union test
    {
        int i;
        float f;
        char c;
    };
    union test *t;
    t = (union test *)malloc(sizeof(union test));
    t->f = 10.10f;
    printf("%f", t->f);
    return 0;
}


A). 10
B). Garbage value
C). 10.100000
D). Error
Answer : Option C

Question 5 :

Assume integer is 2 bytes wide. How many bytes will be allocated for the following code?

#include < stdio . h >
#include < stdlib . h >
#define MAXROW 3
#define MAXCOL 4

int main()
{
    int (*p)[MAXCOL];
    p = (int (*) [MAXCOL]) malloc (MAXROW *sizeof(*p));
    return 0;
}


A). 56 bytes
B). 128 bytes
C). 24 bytes
D). 12 bytes
Answer : Option C

Question 6 :

Assume integer is 2 bytes wide. What will be the output of the following code?

#include < stdio . h >
#include < stdlib . h >
#define MAXROW 3
#define MAXCOL 4

int main()
{
    int (*p)[MAXCOL];
    p = (int (*) [MAXCOL]) malloc( MAXROW *sizeof (*p));
    printf("%d, %d\n", sizeof(p), sizeof(*p));
    return 0;
}


A). 2, 8
B). 4, 16
C). 8, 24
D). 16, 32
Answer : Option A

Question 7 :

How many bytes of memory will the following code reserve?

#include < stdio . h >
#include < stdlib . h >
int main()
{
    int *p;
    p = (int *)malloc(256 * 256);
    if(p == NULL)
        printf("Allocation failed");
    return 0;
}


A). 65536
B). Allocation failed
C). Error
D). No output
Answer : Option B

Explanation :

Hence 256*256 = 65536 is passed to malloc() function which can allocate upto 65535. So the memory allocation will be failed in 16 bit platform (Turbo C in DOS).

If you compile the same program in 32 bit platform like Linux (GCC Compiler) it may allocate the required memory.