3

以下の小さなサンプルがLinux64では失敗するのにWindows32では失敗するのはなぜですか?

module test;

import std.string, std.stdio;

void main(string[] args)
{
    string a = "abcd=1234";
    auto b = &a;
    auto Index = indexOf(*b, '=');

    if (Index != -1)
        *cast (char*) (b.ptr + Index) = '#';

    writeln(*b);
    readln;
}
4

1 に答える 1

6

覚えておくべきことの1つは、要素への書き込みの試行が未定義の動作であることを意味stringするエイリアスであるということです。(immutable char)[]

動作が異なると思う理由の1つは、linux64では、コンパイラが文字列データを書き込み保護されたメモリに配置することです。これは、*cast (char*) (b.ptr + Index) = '#';(サイレントまたはsegfaultで)失敗することを意味します。

于 2013-03-25T09:34:40.923 に答える