75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
이런타입의 배열을 불러오는데, 제가 아래 처럼 코드를 만들었습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 이중포인터 2개. 첫번째는 문자열로 저장할 용도, 두번째는 문자열을 숫자열로 바꿔서 입력할 용도.
//end 문자열 잘라서 숫자로 넣을때 임시로 사용할 용도. 15X15 행렬
char **triangularArray = malloc(sizeof(char *) * 15);
int **triangularArray2 = malloc(sizeof(int *) * 15);
char *end;
//이중포인터에 배정할 포인터들 15개의 숫자를 넣을 예정이기 때문에 문자열은 16개(마지막 NULL포함)
//숫자열은 15개 배정한 후 memset으로 초기화.
for (int i = 0; i < 15; i++)
{
triangularArray[i] = malloc(sizeof(int) * 16);
triangularArray2[i] = malloc(sizeof(int) * 15);
memset(triangularArray2, 0, 15);
}
//text파일 Problem18.txt을 부러온후 fopen이용해 파일 포인터로 저장
FILE *Triangular = fopen("Problem18.txt", "r");
//fgets를 이용해 파일 포인터에 있는 i번째 줄을 문자열 포인터 triangularArray[i]에 저장. 255는 최대용량임.
for (int i = 0; i < 15; i++)
{
fgets(triangularArray[i], 255, Triangular);
triangularArray[i][15] = '0';
printf("%s\n", triangularArray[i]);
}
//fclose를 이용해 파일 포인터 닫아줌. free같은 역할
fclose(Triangular);
//strtol 이용해 triangularArray[i] 문자열을 숫자열로 바꿔서 triangularArray2[i]에 한땀한땀 넣어줌.
//for 문의 첫번째 줄은 triangularArray[i] 불러와 첫 숫자를 짤라서 넣은후 남은 문자열을 end 포인터에 저장.
for (int i = 0; i< 15; i++)
{
triangularArray2[i][0] = strtol(triangularArray[i], &end, 10);
//end에 저장된 문자열을 차례대로 숫자열로 바꿔서 j=2,...13까지 저장.
//다 할 필요있나??;;
for (int j = 1; j < 15; j++)
{
triangularArray2[i][j] = strtol(end, &end, 10);
}
}
//free 이용해 사용한 메모리들 다 반환. for (int i = 0; i < 15; i++) { free(triangularArray[i]); free(triangularArray2[i]); } free(triangularArray); free(triangularArray2); return 0; }
그런데 실행 시키면 자꾸 에러가 나오는군요ㅠㅠ 갑갑해서 디버깅 실행시키니,
for 안의 triangularArray2[i][0] 정의 부분을 가르키며
"예외 발생(0x0022502F, ProjectEuler2.exe): 0xC0000005: 0x00000000 위치를 기록하는 동안 액세스 위반이 발생했습니다.."
이런 에러가 뜨는데 도무지 이유를 모르겟습니다. ㅠㅠ
혹시 이유 혹은 해결책 아시는분 댓글로 알려주시면 감사하겠습니다.