Memory Allocation - Programming

Q1:

Point out the correct statement which correctly free the memory pointed to by 's' and 'p' in the following program?
#include<stdio.h>
#include<stdlib.h>

int main()
{
    struct ex
    {
        int i;
        float j;
        char *s
    };
    struct ex *p;
    p = (struct ex *)malloc(sizeof(struct ex));
    p->s = (char*)malloc(20);
    return 0;
}

A free(p); , free(p->s);

B free(p->s); , free(p);

C free(p->s);

D free(p);

ANS:A - free(p); , free(p->s);

No answer description is available. Let's discuss.