Dynamic memory allocation - how is it supported?

Yes, it is a question. As I understand it, volatile tells the compiler, that this variable could change unexpected. I think you define the pointer here, and it may be used for other things, but it should not change unexpected. But the actual value of ADCSRA can change unexpected. So I guess that you do not need volatile here.