Не обманывайтесь синтаксисом Node n = new Node();
! Node
является структурой, n
размещается в стеке. Вы дважды вызываете getNode
из одной и той же функции в одной и той же среде, поэтому, естественно, вы получаете два указателя на одну и ту же ячейку стека. Более того, эти указатели становятся недействительными («висящими») после возврата getNode
, поскольку расположение в стеке, принадлежавшее n
, может быть перезаписано другим вызовом. Короче: не делай этого. Если вы хотите, чтобы CLR выделяла память, сделайте Node
классом.