행렬 할당에 대한 분할 오류 오류

user3482381

다음은 게임 "광산"과 유사한 그리드 생성을위한 코드입니다.

#include <stdio.h>
#include <stdlib.h>

int main(){

    int nr, nc, ** mtx, i, j;

    //Matrix costruction

    FILE * inStr;

    inStr = fopen("brasa.dat","r");

    if(inStr == NULL){

        printf("\nProblem while opening the file.\n");

        return 1;

    }

    fscanf(inStr, "%d%d", &nr, &nc);

    mtx = (int**) malloc(nr * sizeof(int*));
    if(mtx == NULL){
        printf("\nMemory allocation error.\n");
        return 1;
    }
    else{
        for(i = 0; i < nr; i++)      
            mtx[i] = (int*) malloc(nc * sizeof(int));
            if(mtx[i] == NULL){
                printf("\nMemory allocation error.\n");
                return 1;
            }
    }

    //Filling matrix

    for(i = 0; i < nr; i++){
        for(j = 0; j < nc; j++)
            mtx[i][j] = 0;
    }

    while(!feof(inStr)){
        fscanf(inStr,"%d %d",&i,&j);
        mtx[i][j] = 9;
    }

    fclose(inStr);

    for(i = 0; i < nr; i++){
        for(j = 0; j < nc; j++){

            if(i == 0){
                if(j == 0){
                    if(mtx[i][j+1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j+1] > 8)
                        mtx[i][j]++;
                }
                else if(j == nc-1){
                    if(mtx[i][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j] > 8)
                        mtx[i][j]++;
                }
                else{
                    if(mtx[i][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i][j+1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j+1] > 8)
                        mtx[i][j]++;
                }
            }
            else if(i == nr-1){
                if(j == 0){
                    if(mtx[i+1][j] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j+1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i][j+1] > 8)
                        mtx[i][j]++;
                }
                else if(j == nc-1){
                    if(mtx[i][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j] > 8)
                        mtx[i][j]++;

                }   
                else{
                    if(mtx[i][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j-1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j] > 8)
                        mtx[i][j]++;
                    else if(mtx[i+1][j+1] > 8)
                        mtx[i][j]++;
                    else if(mtx[i][j+1] > 8)
                        mtx[i][j]++;
                }
            }
            else if(j == 0){
                if(mtx[i+1][j] > 8)
                    mtx[i][j]++;
                else if(mtx[i+1][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j] > 8)
                    mtx[i][j]++;
            }
            else if(j == nc-1){
                if(mtx[i+1][j] > 8)
                    mtx[i][j]++;
                else if(mtx[i+1][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j] > 8)
                    mtx[i][j]++;

            }   
            else{
                if(mtx[i-1][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i+1][j-1] > 8)
                    mtx[i][j]++;
                else if(mtx[i+1][j] > 8)
                    mtx[i][j]++;
                else if(mtx[i+1][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j+1] > 8)
                    mtx[i][j]++;
                else if(mtx[i-1][j] > 8)
                    mtx[i][j]++;
            }
            if(mtx[i][j] > 8)
                printf("*\t");
            else
                printf("%d\t", mtx[i][j]);
        }
    }

    free(mtx);
    return 0;
}

프로그램 실행 중에 분할 오류가 나타납니다. 몇 번의 테스트를 해보니 문제가 85 번 줄과 158 번 줄 사이에 있어야한다는 것을 알았습니다. 도와 줄 수 있나요?

pmg

잘못된 액세스 권한이 있습니다.

        // ...
        else if(i == nr-1){               // i is nr - 1
            if(j == 0){
                // ...
            }
            else if(j == nc-1){
                // ...
                else if(mtx[i+1][j] > 8)  // i + 1 is nr (invalid access)
                // ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 행렬에 대한 lapack 형태소 분할 오류

분류에서Dev

int 행렬의 분할 오류

분류에서Dev

분할 오류-Strassen의 행렬 곱셈

분류에서Dev

행렬 할당시 Fortran Seg 오류

분류에서Dev

C의 포인터 배열에 대한 분할 오류 오류

분류에서Dev

큰 행렬의 행 간 최하 거리 찾기 : 할당 제한 오류

분류에서Dev

행렬 곱셈을 수행 할 때 C ++의 분할 오류

분류에서Dev

분할 오류 11 오류

분류에서Dev

행렬의 각 열에 대한 분할 표 가져 오기

분류에서Dev

직사각형 빈 행렬 오류가있는 부적절한 할당

분류에서Dev

randomforest 분류기에 대해 BayesSearchCV 함수를 실행할 때 오류 발생

분류에서Dev

strcpy를 수행 할 때 분할 오류

분류에서Dev

오류 forrtl : 심각 (174) : SIGSEGV, 분할 오류 발생 행렬 곱셈

분류에서Dev

malloc에 의한 분할 오류

분류에서Dev

파이썬에서 변수 할당에 대한 구문 오류

분류에서Dev

R : knncat을 사용하여 범주 형 변수에 대한 분류를 수행 할 때 오류 발생

분류에서Dev

iml 프로 시저에서 행렬 값을 할당 할 때 오류 발생

분류에서Dev

C : 분할 오류

분류에서Dev

Topojson 분할 오류

분류에서Dev

memcpy, 분할 오류

분류에서Dev

memcpy, 분할 오류

분류에서Dev

CURLpp, 분할 오류

분류에서Dev

분할 오류 11?

분류에서Dev

분할 오류 strcpy

분류에서Dev

후속 구조 해제 할당에 대한 구문 오류

분류에서Dev

CUDA의 구조에 대한 간단한 작업 : 분할 오류

분류에서Dev

문자열 C 배열에 대한 포인터에 대한 strncpy를 수행하는 동안 분할 오류

분류에서Dev

정렬 중 분할 오류-Malloc

분류에서Dev

병합 정렬-분할 오류

Related 관련 기사

뜨겁다태그

보관