:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
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: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차원 배열을 쓰실 이유가 전혀 없네요.
09/11/26 10:05
저같으면 ...
char input[102][102]; char output[102][102]; 이렇게 해놓고 풀겠습니다만 --; 특별히 메모리 제약이 없다면 .. 저렇게 해놓고.. 가장자리 부분은 메모리로 잡아만 놓고 사용은하지 않는 것으로 하는게 더 편하지 않을까요? 그러면 코드안에서 이것저것 if나 ?같은 3항 연산자를 쓰지않아도 될 것 같은데요.
|