각 좌표에 1 또는 0이 무작위로 할당 된 2 차원 배열을 만들려고합니다. 좌표 [20] [3]에 도달 할 때까지 잘 작동합니다. 그 후 "세그먼트 오류 11"이 발생합니다.
나는 어떻게, 왜 그런지 전혀 단서가 없다. 특히 예를 들어 200 * 200으로 행렬을 만들 수 있기 때문에 [200] [3] 좌표에서만 여전히 같은 문제가 발생합니다. 따라서 오류가 발생한 마지막 x 좌표에서 항상 세 번째 y 좌표입니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int x, y, i, j ;
x = 20;
y = 20;
int grid [x][y];
for ( i = 0; i <= x; i++) {
for ( j = 0; j <= y; j++) {
grid[i][j] = rand() % 2 ;
printf("grid [%d][%d]: %d\n", i, j, grid[i][j]);
}
}
return 0;
}
C는 배열에 0 기반 인덱싱을 사용합니다. 따라서 다음과 같이 정의 된 배열의 경우
int grid [x][y]
루핑
for ( i = 0; i <= x; i++)
for ( j = 0; j <= y; j++)
경우 오프별로 하나 . ( 부분 참고<=
).
자세히 설명하기 위해 차원 배열에 p
대해 유효한 인덱스는 0
to p-1
입니다.
당신은 당신의 루프 조건을 변경해야 i < x
하고 j < y
경계를 withing에 숙박 할 수 있습니다. 경계를 벗어난 메모리에 액세스하면 정의되지 않은 동작이 발생 합니다.
즉,
int main()
해야한다 int main(void)
, 적어도, 호스팅 환경을위한 C 표준을 준수합니다.grid
여기서 VLA 로 만들 필요가 없습니다 . 차원이 이미 알려진 경우 더 나은 방법은 컴파일 시간 상수 ( #define
)를 사용하여 배열 차원을 생성하는 것입니다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다