하니만 밑에 글에 동적으로 배열선언해서 보면 fread가 제대로 안되나봐요 .. 205값만 출력하고있음..
댓글 6
첫째, row column 정리해서 써라. 뒤죽박죽이냐
darth마교(59.25)2014-09-20 16:50
둘째, 배열의 요소가 바이트인데 (unsigned char) 동적으로 할당할때 포인터로 할당해서 4or8바이트로 할당된다. 배열에서는 row*col*1바이트 인데, 동적 할당에서는 row*col*4바이트이다. 4바이트 크기를 할당받아 1바이트짜리에 대한 포인트로 캐스팅 해서 쓰는거다. malloc은 형검사 안하니 주의하고.
darth마교(59.25)2014-09-20 16:52
셋째, 위 첫째, 둘째는 일단 여기서는 큰 오류가 안나는 기이한 상황이지만(곧 터질거라고), 셋째가 문제인데. 배열과 다차원으로 동적할당하는 것의 의미를 잘 모르는거 같다. 다채배열arr[i][j]는 실제로는 1열로 죽 이어진 i*j개의 메모리를 배열이라는 인덱싱방법으로 사용하는 자료구조잖아?
darth마교(59.25)2014-09-20 16:54
근데 다차배열 동적할당은 메모리에서 보면 배열과 달라, i개가 1열로 따로 있고, 각 arr[i]의 요소마다 포인터로서 j개의 요소를 가리키고 있는거지. ㅅㅂ 쓰고보니 먼말이냐... C++에서 다차배열과,, 다차배열 동적할당의 차이를 메모리측면에서 찾아바바
darth마교(59.25)2014-09-20 16:56
결론은, fread로 데이터를 읽을때 1열로 죽 읽어 오는데, 다차배열 동적할당해놓은건 메모리 상태가 1열로 되어 있지 않다는 거야. 중간 임시 버터로 fread데이터 읽어와서, 2중 for문 돌려서 각 요소마다 집어 넣어 주던지.. 아니면 동적 배열 자체를 row*column개로 할당해서 사용해버려. 다차 배열을 동적할당하는 방법도 2가지 니까 상황에 맞게 쓰는거지.
첫째, row column 정리해서 써라. 뒤죽박죽이냐
둘째, 배열의 요소가 바이트인데 (unsigned char) 동적으로 할당할때 포인터로 할당해서 4or8바이트로 할당된다. 배열에서는 row*col*1바이트 인데, 동적 할당에서는 row*col*4바이트이다. 4바이트 크기를 할당받아 1바이트짜리에 대한 포인트로 캐스팅 해서 쓰는거다. malloc은 형검사 안하니 주의하고.
셋째, 위 첫째, 둘째는 일단 여기서는 큰 오류가 안나는 기이한 상황이지만(곧 터질거라고), 셋째가 문제인데. 배열과 다차원으로 동적할당하는 것의 의미를 잘 모르는거 같다. 다채배열arr[i][j]는 실제로는 1열로 죽 이어진 i*j개의 메모리를 배열이라는 인덱싱방법으로 사용하는 자료구조잖아?
근데 다차배열 동적할당은 메모리에서 보면 배열과 달라, i개가 1열로 따로 있고, 각 arr[i]의 요소마다 포인터로서 j개의 요소를 가리키고 있는거지. ㅅㅂ 쓰고보니 먼말이냐... C++에서 다차배열과,, 다차배열 동적할당의 차이를 메모리측면에서 찾아바바
결론은, fread로 데이터를 읽을때 1열로 죽 읽어 오는데, 다차배열 동적할당해놓은건 메모리 상태가 1열로 되어 있지 않다는 거야. 중간 임시 버터로 fread데이터 읽어와서, 2중 for문 돌려서 각 요소마다 집어 넣어 주던지.. 아니면 동적 배열 자체를 row*column개로 할당해서 사용해버려. 다차 배열을 동적할당하는 방법도 2가지 니까 상황에 맞게 쓰는거지.
열공하고.. 짜줄 까.. 라인당 1유로.