В моей функции stati c main
у меня есть следующий код:
string str1 = "aaaaaaaaa";
pointerTest();
Console.WriteLine( "str1 is: " + str1 );
stati c pointerTest
-метод, который объявлен как unsafe
, содержит следующее :
string str2 = "aaaaaaaaa";
fixed( char* ptr = str2 )
{
for( int i = 0; i < str2.Length / 3; ++i )
ptr[i] = 'z';
}
Console.WriteLine( "str2 is: " + str2 );
Обратите внимание, как str1
и str2
объявлены независимо, но имеют одинаковое содержимое.
Ожидаемый результат этой программы: :
str2 is: zzzaaaaaa
str1 is: aaaaaaaaa
Когда я запускаю программу, фактический вывод показывает это:
str2 is: zzzaaaaaa
str1 is: zzzaaaaaa
Когда я меняю str2
или str1
на не имеют точно такого же содержания (например, добавив еще одну букву «а» в конце str2
), программа действует как ожидалось. Если обнаружил, что такое поведение существует как в . Net Core 3.1 , так и Mono (не уверен в точной версии, я использовал Repl.It )
У меня вопрос, почему такое поведение происходит и что можно сделать, чтобы его обойти.