Зачем латать строку с помощью.ptr терпит неудачу под Linux64, но не под Win32?


Почему небольшая выборка ниже терпит неудачу под 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;
}
1 3

1 ответ:

Следует помнить, что string является псевдонимом (immutable char)[], Что означает, что попытка записи в элементы является неопределенным поведением

Одна из причин, по которой я могу думать, что поведение отличается, заключается в том, что под linux64 компилятор помещает строковые данные в защищенную от записи память, что означает, что *cast (char*) (b.ptr + Index) = '#'; терпит неудачу (либо молча, либо с помощью segfault)