Partager via


Erreur du compilateur CS1666

Mise à jour : novembre 2007

Message d'erreur

Vous ne pouvez pas utiliser des mémoires tampons de taille fixe contenues dans des expressions non fixed. Essayez d'utiliser l'instruction fixed.
You cannot use fixed size buffers contained in unfixed expressions. Try using the fixed statement.

Cette erreur se produit si vous utilisez la mémoire tampon de taille fixe dans une expression qui implique une classe qui n'est pas fixe elle-même. L'exécution est libre de déplacer la classe non fixe pour optimiser l'accès à la mémoire, ce qui risque d'entraîner des erreurs lors de l'utilisation de la mémoire tampon de taille fixe. Pour éviter cette erreur, utilisez le mot clé fixed dans l'instruction.

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); 
   } 
}