Lire en anglais

Partager via


Erreur du compilateur CS1666

Vous ne pouvez pas utiliser des mémoires tampons de taille fixe contenues dans des expressions non fixed. Essayez d’utiliser l’instruction fixed.

Cette erreur se produit si vous utilisez la mémoire tampon de taille fixe dans une expression impliquant une instance qui n’est pas fixe elle-même. Le runtime est libre de déplacer l’instance non fixe pour optimiser l’accès à la mémoire, ce qui peut entraîner des erreurs quand vous utilisez de la mémoire tampon de taille fixe. Pour éviter cette erreur, utilisez l’instruction fixed.

Exemple

L’exemple suivant génère l’erreur 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);
   }
}