gnurails   6달 전

사실 친구가 쓴 코드인데

왜 안되는지 올려달라고 하네요

pichulia   6달 전

음....어디서부터 설명해드려야 할지 모르겠네요....

일단 배열 쓰는 법부터 알고 시작해야할거 같습니다..

gnurails   6달 전

제 코드가 아니라 뭐라고 말은 못 하겠지만 제가 봐도 좀 웃기긴 해요.

다만 작동은 제대로 하는 데 말이죠... 음...

koosaga   6달 전

혹시 몰라서 노트두자면 


저거 0->100으로 바꾸기만 해도 잘 돌아가요 (...)

gnurails   6달 전

0으로 해도 코드블럭에서 잘 돌아가요.

생각해보니 코드 작성자가 가상메모리를 쓰려고 했는데

채점서버 가상메모리 제한에 걸렸나봅니다(...)

koosaga   6달 전

제 말은 100으로 하면 AC가 뜬다는 말이었습니다.

pichulia   6달 전

아마 "동적 메모리 할당" 을 가상메모리라고 쓰신거같네요...


배열의 크기를 어떤 숫자만큼만 할당하게 만들려면, 우선 "포인터" 라는 개념을 알아야 합니다.

사실 배열과 포인터는 똑같은 친구이긴 한데... 자세한 내용을 적기에는 여백이 부족하네요...

(C언어로 먹고살려면 꼭 알아야하는 개념이니까 찾아서 공부해보시는 것이 도움이 될겁니다..)



int table[0];

table[0] = table[maxtab];


코드상에서 이 부분이 의도했던 것은 아마도

"table 배열의 크기를 maxtab 만큼만 할당하고 싶다" 인거 같은데.. 이 부분을 조금 다르게 고쳐보겠습니다.


int *table;

table = new int[maxtab];


우선 table이라는 "포인터" 변수를 하나 만들고, 그 포인터 변수를, 길이가 maxtab인 int 배열로 갈아 끼우겠다는 의미입니다.

이렇게 두 줄을 수정하면, 처음에 의도했던대로 코드가 작성되고, 정답도 받을 수 있게 됩니다.


(위의 일련의 작업을,...음... 모두가 그러는진 모르겠는데, 저는 "메모리 할당" 이라고 부릅니다. new!

메모리를 할당하여 쓸만큼 다 쓴 다음에는 꼭 "메모리 해제"를 해줘야 합니다.

안그러면 메모리상에 있는 이 값이 프로그램에서 지금 쓰고있어서 덮어씌우면 안되는건지 

판달할 수 있는 방법이 없습니다. 메모리 해제를 제대로 해주지 않아서 생기는 문제를 "메모리 누수"라고 부르지요.

뭐...이런 3개의 키워드를 적절히 조합해서 구글링하시면, 동적 할당과 메모리 활용하는 법에 대해서 꽤나 많이 알 수 있게 된답니다.)


댓글을 작성하려면 로그인해야 합니다.