Вы в основном возвращаете указатель на локальную переменную, что совершенно неправильно.
Существует различие в ключевом слове C # new
и ключевом слове C ++ new
, точнее, в его взаимодействии с class
и struct
в C #. В C ++ new
всегда означает выделение в куче, которую вам нужно вручную отменить. В C # new
вызов на class
означает выделение кучи, но new
вызов на struct
просто инициализирует локальную переменную.
Этот код C #:
MyStruct myStructNew = new MyStruct(v);
эквивалентен этому коду C ++
MyStruct myStructNew{v};
Ключевое слово
C # struct
создает тип значения, что означает, что в вашем случае оно размещается в стеке. Затем после возврата из ChangeMe
стек уменьшается, освобождая локальные переменные. При втором вызове стек снова увеличивается, выделяя локальные переменные для второго вызова. Поскольку вы вызываете один и тот же метод, та же самая позиция стека будет использоваться для второго MyStruct myStructNew
.