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