You can only free what you allocated with malloc. In the above code 'p_array' looks like a global variable or something which means you don't have to free it.
What do you mean by DMA ? I take this to mean Direct Memory Access which is irrelevant here.