C언어 2차원 배열 동적 할당 중 엑세스 위반

조회수 1270회

2차원 배열 동적 할당 중

예외 발생(0x00F55146, Project1.exe): 0xC0000005: 0xFDFDFE01 위치를 읽는 동안 액세스 위반이 발생했습니다..

다음과 같은 메시지를 받았습니다.

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

int main() {

    int row, column;

    scanf_s("%d %d", &row, &column);

    char** matrix = (char**)malloc(sizeof(char*)*row);

    for (int i = 0; i < row; i++)
        matrix[i] = (char*)malloc(sizeof(char)*column);

    matrix[0][0] = 'a';

    printf("%c", matrix[0][0]);

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++)
            scanf_s(" %c", matrix[row][column], 1); // 액세스 위반 위치
    }

    for (int i = 0; i < row; i++) {
        printf("\n");
        for (int j = 0; j < column; j++)
            printf("%c ", matrix[column][row]);
    }
}

보시면 matrix[0][0]에 문자 a를 넣는 것까지는 문제 없이 돌아갑니다.

이 결과를 통해 matrix[0][0]에 memory allocation이 정상적으로 됐다는 것으로 이해했는데

matrix[0][0]에 scanf_s로 문자를 읽어서 할당하려고 하니 액세스 위반이 발생했습니다.

액세스 위반은 메모리 공간이 없는 곳에 데이터 할당을 하려고 하면 발생한다고 보았는데..

matrix[0][0]에 문자 a를 할당하지 않고 scanf_s를 해도 마찬가지였습니다 ㅠㅠ

왜 그럴까요..?

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)