Does the following code run successfully to return 0 or does it generate a fault? If it runs fine, then what is the output? Otherwise, explain why it is faulty. #include #include void populate(int *a) { int *parray = malloc(2 * sizeof(int)); parray[0] = 37; parray[1] = 73; a = parray; } int main() { int *a = NULL; populate(a); printf("a[0] = %d and a[1] = %d\n", a[0], a[1]); return 0; }