Зачем латать строку с помощью.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 ответ:
Следует помнить, что
string
является псевдонимом(immutable char)[]
, Что означает, что попытка записи в элементы является неопределенным поведениемОдна из причин, по которой я могу думать, что поведение отличается, заключается в том, что под linux64 компилятор помещает строковые данные в защищенную от записи память, что означает, что
*cast (char*) (b.ptr + Index) = '#';
терпит неудачу (либо молча, либо с помощью segfault)