SetActorLocation Crashing

Might be related to this line here:

     ATestWeapon* Wp = Cast<ATestWeapon>(Weapon);     

What exactly is “Weapon”? Are you 100% sure it will always be valid? Do you ever assign the spawned “Wp” to your weapon variable?
Try adding a check such as

     if(Wp) Wp->SetActorLocation(ADSOffset);