Product of all but one number in a sequence - Follow Up (2)
Proper scoping
int mult=1; //product of prefix or suffix elements


mult above is only used in the first loop. The one used in the second loop is defined there, and limited to that loop. This one should be the same.

Proper naming

j in the second loop is an unexpected name. As it is an outer loop, you should use i (again).

int size = sizeof(nums)/sizeof(nums[0]);


While size isn't really wrong, I would expect a different unit of measurement (namely bytes, as for sizeof, instead of elements) considering the name. I suggest going for count.

Check for failure
int *products = derive_products(nums, size); //get a new array


The above can fail, in which case it returns null. Don't just assume success.

Comments
//without division, with O(n) time, but extra space complexity as suggested
//return new array on the heap 


Comments should be to the point, omit the obvious, and describe the motivation.
The above could be:
// without division in O(n) time
// free(result)


Yes, writing down the task as a comment is a good idea. But if you have test-data, just write a test.

Your comment after a line of code are pretty superfluous. Are you forced to sprinkle more comments?
See Guessing a number, but comments concerning


Whitespace

Your use of whitespace is inconsistent. Do you surround binary operators with single whitespace?
Sometimes you do, sometimes you don't. Imho, doing so looks better, so standardise on that. There are plenty automatic code formatters, so you don't even have to do the hard work yourself.