오류 해결: 배열 크기가 호환되지 않습니다
문제
다음 상황 중 하나에 해당하는 경우 코드 생성기에서 배열 크기 비호환성 오류가 발생합니다.
코드 생성기가 이전에 고정 크기로 정의한 변수인데 사용자 코드에서 이 변수의 크기를 변경합니다. 이러한 유형의 오류는 변수에 값을 할당할 때, 함수에 변수를 전달할 때 또는 함수에서 변수를 반환할 때 발생할 수 있습니다.
코드가 호환되지 않는 크기의 두 배열에 대해 연산을 수행합니다. 또는 호환되는 크기의 두 배열에 대해 코드가 연산을 수행하지만 묵시적 확장은 비활성화되어 있습니다.
이러한 경우 코드 생성기에서 다음 오류 중 하나가 발생합니다.
배열 크기가 호환되지 않습니다(Arrays have incompatible sizes)
요소 'element'의 배열 크기가 호환되지 않습니다(Arrays in element 'element' have incompatible sizes)
필드 'field'의 배열 크기가 호환되지 않습니다(Arrays in field 'field' have incompatible sizes)
배열의 크기가 호환되지 않기 때문에 이 연산을 수행할 수 없습니다(Unable to perform this operation because the sizes of the arrays are incompatible)
가능한 해결 방법
코드 생성기에서 오류가 변수 할당 중에 발생하는지 아니면 이항 (두 배열) 연산 중에 발생하는지 여부에 따라 다음 해결 방법 중 하나를 시도해 보십시오.
변수가 coder.varsize를 사용하여 크기를 변경할 수 있도록 코드 생성기에 지시하기
변수에 값을 할당할 때, 또 다른 함수에 변수를 전달할 때 또는 함수에서 변수를 반환할 때 오류가 발생하는 경우, 코드가 코드 생성기에서 이전에 고정 크기로 정의한 변수의 크기를 변경하는 것일 수도 있습니다. 이러한 상황에서는 변수가 coder.varsize (MATLAB Coder)를 사용하여 크기를 변경할 수 있도록 코드 생성기에 명시적으로 지시하십시오. Address Size Incompatibility Error When Generating Code (MATLAB Coder) 항목을 참조하십시오.
코드 생성 시 MATLAB® 코드에서 가변 크기 배열을 사용하는 것에 대한 자세한 내용은 가변 크기 배열에 대한 코드 생성 (MATLAB Coder) 항목을 참조하십시오.
호환되는 크기의 배열에 대해 이항 연산 수행하기
이항 연산 중에 오류가 발생하는 경우 코드에 크기 비호환성 문제가 있는지 확인하십시오.
MATLAB에 있는 대부분의 이항 연산자와 함수는 호환 가능한 크기를 갖는 숫자형 배열을 지원합니다. 각 차원에 대해 두 입력값이 크기가 동일하거나 차원 중 하나가 1인 경우 이 두 입력값은 호환 가능한 크기를 갖습니다. MATLAB은 요소별 연산 또는 함수 실행 시 동일한 크기가 되도록 호환되는 크기의 배열을 묵시적으로 확장합니다. 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.
기본적으로 코드 생성기는 호환되는 크기의 배열에 대해 묵시적 확장과 이항 연산을 지원합니다. 그러나 다음 조건 중 하나에 해당하는 경우 코드 생성기에서 크기 비호환성 오류가 발생합니다.
호환되지 않는 크기의 두 배열에 대해 코드가 연산을 수행합니다. 이러한 코드는 MATLAB 실행에서도 오류가 발생합니다.
호환되는 크기의 두 배열에 대해 코드가 연산을 수행하지만 묵시적 확장은 비활성화되어 있습니다.
이 오류를 해결하려면, 먼저 MATLAB에서 코드를 실행하여 이항 연산에서의 배열이 호환되는 크기를 가지고 있는지 확인합니다. 코드를 생성하기 전에 MATLAB에서 코드를 성공적으로 실행하십시오.
MATLAB에서 코드를 성공적으로 실행했지만 코드 생성기에서 크기 비호환성 오류가 발생하는 경우에는 묵시적 확장이 비활성화된 것일 수도 있습니다. 코드가 묵시적 확장을 비활성화하는 방식에 따라 다음 해결 방법 중 하나를 시도해 보십시오.
coder.sameSizeBinaryOp(MATLAB Coder)를 사용하여 함수에서 묵시적 확장을 비활성화하는 경우, 이 함수에 전달하는 입력값들이 동일한 크기를 갖도록 하십시오.coder.noImplicitExpansionInFunction(MATLAB Coder) 지시문을 사용하여 함수에서 묵시적 확장을 비활성화하는 경우, 함수에서의 모든 이항 연산이 동일한 크기의 입력값에 대해 수행되도록 하십시오. 또는 묵시적 확장을 비활성화하지 않은 또 다른 함수에서 이러한 연산을 수행하십시오.코드 구성 대화 상자를 사용하거나 코드 구성 객체를 사용하여 전역적으로 묵시적 확장을 비활성화하였지만 특정 함수 및 연산에 대해서만 묵시적 확장을 방지해야 하는 경우, 묵시적 확장을 전역적으로 다시 활성화하십시오. 그런 다음
coder.sameSizeBinaryOp또는coder.noImplicitExpansionInFunction을 사용하여 특정 함수 또는 연산에 대해 묵시적 확장을 비활성화하십시오.
Optimize Implicit Expansion in Generated Code (MATLAB Coder) 항목을 참조하십시오.
참고 항목
coder.varsize (MATLAB Coder) | coder.noImplicitExpansionInFunction (MATLAB Coder) | coder.sameSizeBinaryOp (MATLAB Coder)
도움말 항목
- Define Variable-Size Data for Code Generation (MATLAB Coder)
- Optimize Implicit Expansion in Generated Code (MATLAB Coder)