Chyba kompilátoru CS1666
Vyrovnávací paměti pevné velikosti obsažené v nefixovaných výrazech nelze použít. Zkuste použít pevný příkaz.
K této chybě dochází, pokud použijete vyrovnávací paměť s pevnou velikostí ve výrazu zahrnujícím instanci, která není sama o sobě pevná. Modul runtime je volný pro přesunutí nefixované instance za účelem optimalizace přístupu k paměti, což by mohlo vést k chybám při použití vyrovnávací paměti s pevnou velikostí. Pokud se chcete této chybě vyhnout, použijte příkazfixed
.
Následující ukázka vygeneruje CS1666.
// CS1666.cs
// compile with: /unsafe /target:library
unsafe struct S
{
public fixed int buffer[1];
}
unsafe class Test
{
S field = new S();
private bool example1()
{
return (field.buffer[0] == 0); // CS1666 error
}
private bool example2()
{
// OK
fixed (S* p = &field)
{
return (p->buffer[0] == 0);
}
}
private bool example3()
{
S local = new S();
return (local.buffer[0] == 0);
}
}
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: