4

コード ブロックまたはメソッドでポインターを使用してマネージ C# 文字列をその場で操作する (たとえば、文字を逆にする) 場合、unsafeその安全でない実装によって .NET 文字列プール メカニズムが混乱したり破損したりする可能性はありますか?

提案された操作対象の文字列は、マネージ コードで作成され、安全でないメソッドに渡されて操作されます。

このシナリオの例:

static void Main(string[] args) {
    string s = "this is a test";
    UnsafeReverse(s);
    Console.WriteLine(s); // displays "tset a si siht"
    // assume more managed strings are created and used along with the affected s. 
}

static unsafe void UnsafeReverse(string str) {
    int len = str.Length;

    fixed (char* pStr = str) {
        char* p1 = pStr;
        char* p2 = pStr + len - 1;

        char tmp;
        while (p1 < p2) {
            tmp = *p1;
            *p1 = *p2;
            *p2 = tmp;
            ++p1; --p2;
        }
    }
}
4

1 に答える 1