#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
scanf("%d", &n);
int **matrix = malloc(sizeof(int *) * n);
for (int i = 0; i < n; i++)
{
matrix[i] = malloc(sizeof(int) * n);
memset(matrix[i], 0, sizeof(int) * n);
for (int i = 0; i < n; i++)
{
matrix[i][i] = 1;
printf("%d ",matrix[i][i]);
}
printf("\n");
}
for (int i = 0;i<n;i++)
{
free(matrix[i]);
}
free(matrix);
return 0;
}
matrix[i][i] = 1;이 부분에서 오류가 나는데 이유좀 알려주세요ㅠㅠ
UNIT 35 처음에 보면 메모리를 할당해서 사용할 때는
malloc -> 사용 -> free
(그림 35-1)
처럼 각 단계가 구분되어 있습니다.
문의한 코드는 malloc과 사용이 한 덩어리로 되어 있습니다.
메모리를 할당한 곳에 접근(사용)하는 코드는 문제가 없지만,
아직 메모리를 할당하지 않은 곳에 접근(사용)하는 코드는 프로그램 충돌도 프로그램이 죽습니다.(Visual Studio에서 F5로 디버그 모드로 실행하면 허용되지 않은 접근 예외 발생)
UNIT 38.3의 pointer_like_two_dimensional_array.c 예제를 보면
2차원 배열을 위한 메모리 할당
2차원 배열 사용
메모리 해제
순서로 되어 있습니다.