Contenu principal

Résoudre l’erreur : tableaux de tailles incompatibles

Problème

Le générateur de code peut indiquer des erreurs d’incompatibilité de taille des tableaux, dans les situations suivantes :

  • Votre code modifie la taille d’une variable que le générateur de code a précédemment définie comme étant de taille fixe. Ce type d’erreur peut se produire lorsque vous affectez une valeur à une variable, lorsque vous passez une variable à une fonction ou lorsqu’une fonction renvoie une variable.

  • Votre code effectue une opération sur deux tableaux de tailles incompatibles. Ou bien votre code effectue une opération sur deux tableaux de tailles compatibles mais l’expansion implicite est désactivée.

Dans ces situations, le générateur de code affiche l’une des erreurs suivantes :

Arrays have incompatible sizes

Arrays in element 'element' have incompatible sizes

Arrays in field 'field' have incompatible sizes

Unable to perform this operation because the sizes of the arrays are incompatible

Solutions possibles

Essayez l’une des solutions suivantes selon que le générateur de code indique l’erreur au moment de l’affectation d’une variable ou pendant une opération binaire (sur deux tableaux).

Demander au générateur de code d’autoriser une variable à changer de taille avec coder.varsize

Si l’erreur se produit lorsque vous affectez une valeur à une variable, lorsque vous passez une variable à une autre fonction ou lorsqu’une fonction renvoie une variable, il se peut que votre code modifie la taille d’une variable que le générateur de code a précédemment définie comme étant de taille fixe. Dans ce cas, demandez explicitement au générateur de code d’autoriser cette variable à changer de taille avec coder.varsize (MATLAB Coder). Consultez la rubrique Address Size Incompatibility Error When Generating Code (MATLAB Coder).

Pour plus d’informations sur l’utilisation de tableaux de taille variable dans le code MATLAB® pour la génération de code, consultez Generate Code for Variable-Size Arrays (MATLAB Coder).

Effectuer des opérations binaires sur des tableaux de tailles compatibles

Si l’erreur se produit pendant une opération binaire, vérifiez si votre code a un problème d’incompatibilité de taille.

La plupart des opérateurs et fonctions binaires de MATLAB supportent les tableaux numériques de tailles compatibles. Deux entrées sont de tailles compatibles si elles sont de même taille pour chaque dimension ou si l’une des dimensions est 1. MATLAB étend implicitement les tableaux de tailles compatibles pour qu’ils aient la même taille pendant l’exécution d’opérations ou de fonctions élément par élément. Consultez la rubrique Tailles de tableau compatibles pour les opérations de base.

Par défaut, le générateur de code supporte l’expansion implicite et les opérations binaires sur des tableaux de tailles compatibles. En revanche, il indique des erreurs d’incompatibilité de taille si l’une des conditions suivantes est vraie :

  • Votre code effectue une opération sur deux tableaux de tailles incompatibles. Ce code entraîne aussi une erreur lors de l’exécution dans MATLAB.

  • Votre code effectue une opération sur deux tableaux de tailles compatibles mais l’expansion implicite est désactivée.

Pour résoudre cette erreur, commencez par exécuter votre code dans MATLAB afin de vérifier que les tableaux concernés par les opérations binaires sont de tailles compatibles. Exécutez votre code sans erreur dans MATLAB avant de générer le code.

Si votre code s’exécute sans erreur dans MATLAB mais que le générateur de code indique une erreur d’incompatibilité de taille, il se peut que l’expansion implicite soit désactivée. Essayez l’une des solutions suivantes selon la façon dont votre code désactive l’expansion implicite :

  • Si vous désactivez l’expansion implicite dans une fonction avec coder.sameSizeBinaryOp (MATLAB Coder), assurez-vous que les entrées passées à cette fonction sont de même taille.

  • Si vous désactivez l’expansion implicite dans une fonction avec l’instruction coder.noImplicitExpansionInFunction (MATLAB Coder), assurez-vous que toutes les opérations binaires de cette fonction sont effectuées sur des entrées de même taille. Sinon, effectuez ces opérations dans une autre fonction pour laquelle vous ne désactivez pas l’expansion implicite.

  • Si vous avez désactivé l’expansion implicite de manière globale en utilisant la boîte de dialogue « Code Configuration » ou un objet de configuration de code mais que vous n’avez besoin de l’empêcher que pour certaines fonctions et opérations, réactivez-la de manière globale. Ensuite, désactivez-la pour des fonctions ou opérations spécifiques avec coder.sameSizeBinaryOp ou coder.noImplicitExpansionInFunction.

Consultez la rubrique Optimize Implicit Expansion in Generated Code (MATLAB Coder).

Voir aussi

(MATLAB Coder) | (MATLAB Coder) | (MATLAB Coder)

Rubriques