It seems fine. The second approach consumes more memory (it has to store two graphs from the forward and the reverse pass at the same time), but the end result should be the same.
No, the gradients get accumulated (summed with the previous value).