Hauptinhalt

Fehler beheben: Die Arrays weisen inkompatible Größen auf

Problem

Der Codegenerator kann in beiden folgenden Situationen Fehler aufgrund inkompatibler Array-Größen erzeugen:

  • Ihr Code ändert die Größe einer Variablen, die der Codegenerator zuvor als feste Größe definiert hatte. Dieser Fehler kann auftreten, wenn Sie einer Variablen einen Wert zuweisen, wenn Sie eine Variable an eine Funktion übergeben oder wenn Sie eine Variable aus einer Funktion zurückgeben.

  • Ihr Code führt eine Operation an zwei Arrays durch, deren Größen nicht miteinander kompatibel sind. Alternativ führt Ihr Code eine Operation an zwei Arrays mit kompatiblen Größen durch, wobei die implizite Erweiterung jedoch deaktiviert ist.

In diesen Fällen gibt der Codegenerator einen der folgenden Fehler aus:

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

Mögliche Lösungen

Je nachdem, ob der Codegenerator den Fehler bei der Variablenzuweisung oder bei einer binären Operation (mit zwei Arrays) erzeugt, probieren Sie eine der folgenden Lösungen aus.

Anweisung an den Codegenerator, die Größenänderung einer Variablen zuzulassen, mithilfe von coder.varsize

Sollte der Fehler auftreten, wenn Sie einer Variablen einen Wert zuweisen, eine Variable an eine andere Funktion übergeben oder eine Variable aus einer Funktion zurückgeben, kann es sein, dass Ihr Code die Größe einer Variablen verändert, die der Codegenerator zuvor als feste Größe definiert hatte. Weisen Sie den Codegenerator in diesem Fall mithilfe von coder.varsize ausdrücklich an, eine Größenänderung der Variablen zuzulassen. Siehe Address Size Incompatibility Error When Generating Code.

Weitere Informationen zur Verwendung von Arrays mit variabler Größe im MATLAB® Programmcode zur Codegenerierung finden Sie unter Generate Code for Variable-Size Arrays.

Durchführen binärer Operationen an Arrays kompatibler Größe

Sollte der Fehler während einer binären Operation auftreten, überprüfen Sie, ob in Ihrem Code ein Problem aufgrund inkompatibler Größen vorliegt.

Die meisten binären Operatoren und Funktionen in MATLAB unterstützen numerische Arrays mit kompatiblen Größen. Zwei Eingaben haben kompatible Größen, wenn die Eingaben in jeder Dimension dieselbe Größe haben oder eine der Dimensionen 1 beträgt. MATLAB erweitert Arrays mit kompatiblen Größen während der Ausführung von elementweisen Operationen oder Funktionen implizit auf dieselbe Größe. Siehe Kompatible Arraygrößen für Basisoperationen.

Standardmäßig unterstützt der Codegenerator die implizite Erweiterung sowie binäre Operationen auf Arrays kompatibler Größe. Der Codegenerator erzeugt jedoch Fehler wegen Größeninkompatibilität, wenn eine der beiden folgenden Bedingungen zutrifft:

  • Ihr Code führt eine Operation an zwei Arrays inkompatibler Größe durch. Dieser Code führt auch bei der MATLAB-Ausführung zu Fehlern.

  • Ihr Code führt eine Operation an zwei Arrays mit kompatiblen Größen durch, wobei die implizite Erweiterung jedoch deaktiviert ist.

Um diesen Fehler zu beheben, führen Sie Ihren Code zunächst in MATLAB aus, um sicherzustellen, dass die Arrays bei binären Operationen kompatible Größen aufweisen. Führen Sie Ihren Code erfolgreich in MATLAB aus, bevor Sie Code generieren.

Falls Ihr Code in MATLAB problemlos ausgeführt wird, der Code-Generator jedoch einen Fehler wegen Größeninkompatibilität ausgibt, ist die implizite Erweiterung möglicherweise deaktiviert. Je nachdem, wie Ihr Code die implizite Erweiterung deaktiviert, probieren Sie eine der folgenden Lösungen aus:

  • Wenn Sie die implizite Erweiterung für eine Funktion mithilfe von coder.sameSizeBinaryOp deaktivieren, stellen Sie sicher, dass die an diese Funktion übergebenen Eingaben dieselbe Größe haben.

  • Wenn Sie die implizite Erweiterung für eine Funktion mithilfe der coder.noImplicitExpansionInFunction-Anweisung deaktivieren, stellen Sie sicher, dass alle binären Operationen in der Funktion mit Eingaben gleicher Größe durchgeführt werden. Alternativ können Sie diese Operationen in einer anderen Funktion ausführen, in der Sie die implizite Erweiterung nicht deaktivieren.

  • Wenn Sie die implizite Erweiterung global über das Dialogfeld „Code Configuration“ oder mithilfe eines Code-Konfigurationsobjekts deaktivieren, die implizite Erweiterung jedoch nur für bestimmte Funktionen und Operationen unterbinden möchten, aktivieren Sie die implizite Erweiterung global wieder. Deaktivieren Sie anschließend die implizite Erweiterung für bestimmte Funktionen oder Operationen mithilfe von coder.sameSizeBinaryOp oder coder.noImplicitExpansionInFunction.

Siehe Optimize Implicit Expansion in Generated Code.

Siehe auch

| |

Themen