Это небезопасно, поскольку память, выделенная с помощью stackalloc
, больше не гарантируется, что будет доступна после выхода из функции.
Во всех случаях, когда это компилируется, вы использовали небезопасные средства для отмены предупреждений.Используя небезопасный код, вы можете делать все, что захотите.Например, вы можете вернуть указатель на int
в стеке (int x = 0; return &x;
), который столь же небезопасен.
Это не может быть каким-либо другим способом, потому что язык или среда выполнения не могут отследить время жизничерез эти небезопасные объекты.Даже если бы он мог отследить его, он бы разрушил преимущества производительности stackalloc
.stackalloc
память быстрая, потому что известно, что она освобождается при выходе из функции.