SNAIL RTE 질문 있습니다.

  • AlKook
    AlKook

    최근 제출된 답안:
    311846
    output log:
    RTE (SIGKILL: program was forcefully killed, probably memory limit exceeded)

    여기서 메모리 초과가 나는 이유를 잘 모르겠습니다.

    최대로 잡았을때 double을 1000 * 2000개 메모리에 올리는데
    16000000byte ~= 16000kb 라서 허용범위안에 들어간다고 생각했습니다.

    source code:

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    double climb(int day, int climbed, int deadline, int depth, double** cache)
    {
        if (day == deadline) {
            return (climbed >= depth) ? (1) : (0);
        }
    
        double& ret = cache[day][climbed];
        if (ret != -1) {
            return ret;
        }
    
        return ret = 0.25 * climb(day+1, climbed+1, deadline, depth, cache) 
                   + 0.75 * climb(day+1, climbed+2, deadline, depth, cache);
    }
    
    void solveCase(void)
    {
        int depth = 0;
        int deadline = 0;
        cin >> depth >> deadline;
    
        double** cache = new double*[deadline];
        for (int i = 0; i< deadline; i++)
        {
            cache[i] = new double[deadline*2 + 1];
        }
    
        for (int i = 0; i< deadline; i++)
        {
            for (int j = 0; j< deadline*2 +1; j++)
            {
                cache[i][j] = -1;
            }
        }
    
        double answer = climb(0, 0, deadline, depth, cache);
        cout.precision(10);
        cout.setf(ios::fixed, ios::floatfield);
        cout << answer << endl;
    }
    
    int main(void)
    {
        int cases=0;
        cin >> cases;
        while(cases--)
        {
            solveCase();
        }
        return 0;
    }
    

    9년 전
4개의 댓글이 있습니다.
  • jseo
    jseo

    메모리 free를 안하시는것 같네요.


    9년 전 link
  • AlKook
    AlKook

    현재 코드를 보시면 매 test case마다 solveCase 함수로 재 진입하고 있습니다.

    solveCase 함수가 종료될때 자동으로 메모리는 해제되지 않는건가요?


    9년 전 link
  • jseo
    jseo

    메모리를 힙에 할당하고 있어서 함수가 종료되도 자동으로 해제되지 않습니다.


    9년 전 link
  • AlKook
    AlKook

    제가 잘못 생각 하고 있었네요.
    알려주셔서 감사합니다.

    동적할당: 스택을 벗어날때가 아니라 프로세스가 모두 종료될때 OS에서 자동 반환.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.