PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/11/25 21:28:15
Name 소인배
File #1 pr2.jpg (143.8 KB), Download : 9
File #2 Problem002.c (1.5 KB), Download : 16
Subject 이중 포인터 관련 질문입니다.


일단 풀고자 하는 문제는

http://programming-challenges.com/pg.php?page=downloadproblem&probid=110102&format=html

이겁니다. 위에 올린 바와 같이 짰는데(indentation이 안 돼서 이미지도 첨부했습니다), segmentation error가 나면서 뻗는군요. 분명히 이중 포인터를 잘못 써서 그런 것 같은데...

예를 들어 이중 포인터를 쓸 때 field[i][j]라고 쓰면 &field+i+j의 주소에 있는 값을 가져오나요? 좀 혼란스럽네요.

어떻게 수정하면 될지 궁금합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
WizardMo진종
09/11/25 21:47
수정 아이콘
딴건 모르고 &field+i+j는 아닐겁니다.
아마도 저거 표현하는 방법이 있는데 책이 지금 없어서;;;

http://openparadigm.tistory.com/19?srchid=BR1http%3A%2F%2Fopenparadigm.tistory.com%2F19

요거 참고하시면 될꺼 같습니다. 그리고 툴 폰트가 이쁘네요. 무슨프로그램인가요?
소인배
09/11/25 21:56
수정 아이콘
WizardMo진종님// 감사합니다. 참고하겠습니다. 그리고 좀 몇 가지 삽질을 찾아서 디버깅을 했는데... 여전히 segmentation fault가 일어나니 알 수가 없군요. 프로그램은 Textmate이고, 폰트는 Monaco입니다.
09/11/25 22:26
수정 아이콘
init() 실행 되는 건가요? main에 안 보이는데..
09/11/25 22:36
수정 아이콘
field[i][j] 를 *(*(field + i) + j) 로 나타낼 수 있다는 것에 착안하면..
fileld[i][j]는 &(&(field + i) + j)의 주소에 있는 값을 가져 오는 것으로 알고 있습니다..

구문 강조 파일은.. 직접 만들어서 사용하시는건가요?? 아님 Textmate 기본 구문강조 파일 인가요??
소인배
09/11/25 22:52
수정 아이콘
kgaeby님// 매 cycle마다 할당을 해야 하므로 get_field에서 호출하는데요... 잠시요, 미리 malloc으로 할당을 하고 나서 realloc으로 매 cycle마다 재할당해야 하나요?
AriENai님// 흠, 역시 그 값이 맞죠? 구문 강조는 Textmate 기본입니다.
오바마빈라덴
09/11/25 23:03
수정 아이콘
일단.. init에서는 [n][m]으로 메모리를 잡아놓고 get field에서는 [m][n]으로 받아오게 돼 있네요. 거기 말고도 m이랑 n이랑 잘못 쓰신 부분이 몇군데 있는거 같구요.. 그리고 마지막에 %d로 찍으면 '*'는 출력이 안되지 않나요?

그리고 이중포인터라고 해도 field는 주소값을 가리키는건데, field가 가리키는 주소에 있는 배열에는 각자 다른 배열의 주소가 하나씩 들어있는거죠. (제가 써놓고도 무슨 말인지 -_-) 하여간 그래서 field[i][j]는 *(field+i)+j, 또는 field[i] + j 주소에 있는 값을 나타내게 됩니다.
소인배
09/11/25 23:14
수정 아이콘
오바마빈라덴님// 그거 수정했습니다 -_-; 근데 get_field나 init에서 segmentation fault가 일어나네요. 일단 소스 수정해서 올리겠습니다. jpg 파일은 그대로겠지만요...
오바마빈라덴
09/11/26 00:16
수정 아이콘
시스템에 따라서 달라지는지는 모르겠지만.. 대부분의 경우에 printf는 개행문자가 나올때까지 출력할 내용을 버퍼에 쌓아놓고 있기 때문에.. 저런식으로 디버깅에 쓰려고 할 때는 뒤에다 \n을 붙여주거나 정확히 기억은 안나지만 fflush(stdout); 같은걸 써줘야 됩니다.

혹시나 싶어서 찾아보니까 부등호가 물음표보다 우선순위가 높네요. 그래서 k<(i==n-1)? (i):(i+1) 는 (k<(i==n-1))? (i):(i+1)으로 동작하게 되구요, 제 생각에는 그냥 k < i + 1이라고 쓰거나 < 대신 <=가 들어가는게 맞을거 같네요.
큐리스
09/11/26 03:26
수정 아이콘
이런 형태일 경우에는 m * n 크기인 1차원 배열을 잡으시고
index를 직접 계산해주시는 게 더 효율적입니다.
2차원 배열을 쓰실 이유가 전혀 없네요.
Humaneer
09/11/26 10:05
수정 아이콘
저같으면 ...

char input[102][102];
char output[102][102];

이렇게 해놓고 풀겠습니다만 --;

특별히 메모리 제약이 없다면 .. 저렇게 해놓고.. 가장자리 부분은 메모리로 잡아만 놓고 사용은하지 않는 것으로 하는게 더 편하지 않을까요? 그러면 코드안에서 이것저것 if나 ?같은 3항 연산자를 쓰지않아도 될 것 같은데요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
68573 팝송 추천 부탁드립니다. & 국내가요 한 곡 좀 찾아주세요. [4] ruin2209 09/11/25 2209
68572 매달리기와 팔굽혀펴기의 차이는 뭘까요?? [11] 로즈마리2781 09/11/25 2781
68571 디카 기능중에 먼지제거 기능이 영어로 뭔지 아시는 분 계신가요? [2] ManUmania1820 09/11/25 1820
68570 홍대앞 dvd방 질문..! [7] MayBee13773 09/11/25 13773
68569 컴퓨터 윈도우 관련 질문입니다. [2] 날씨1551 09/11/25 1551
68568 수학관련 질문입니다~ [3] StarT2172 09/11/25 2172
68567 토익관련질문 [5] 미다스2159 09/11/25 2159
68566 영화제목 질문입니다. [7] 항즐이2207 09/11/25 2207
68565 개인신상정보유출 신고할수있나요? [1] 구우사마2225 09/11/25 2225
68564 컴퓨터 관해 질문 드립니다. [3] 탈로맨티스트1768 09/11/25 1768
68563 또 다시 뜬금없는 화학 질문인데요.. [3] LastStage8976 09/11/25 8976
68562 이중 포인터 관련 질문입니다. [10] 소인배1633 09/11/25 1633
68561 던파질문!!!! [9] 임자있슈2023 09/11/25 2023
68560 공익 어떤곳이 편한가요?? [26] 데쓰노트5194 09/11/25 5194
68559 이런 프로그램 있나요? [4] 행복하게살자2129 09/11/25 2129
68557 스타크래프트 인공지능 vs 바둑 인공지능 [11] 박수2210 09/11/25 2210
68556 habsburg 님.. 했어요.. 이거 다운로드 받으세요. [1] 율리우스 카이2107 09/11/25 2107
68554 엑셀질문입니다 도와주세요(파일 안깨지게 수정) [5] habsburg1905 09/11/25 1905
68553 조립컴퓨터 견적 조언 부탁드립니다. [7] Dementia-1931 09/11/25 1931
68552 멀티커맨더핵 최신 버젼 질문이요~ [5] 겨울愛1906 09/11/25 1906
68550 과거 피쟐 FREE BBS 게시판 글들 어디갔죠? [2] 2132 09/11/25 2132
68549 음... PvsZ 질문좀... [1] Psy_Onic-0-2143 09/11/25 2143
68548 장시간 모니터 보시는 분들께 질문 좀 드릴께요... [9] 민죽이2103 09/11/25 2103
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로