MAXSUM 왜 런타임 오류가 발생할까요?...

  • issuemine
    issuemine

    RTE (SIGABRT: program aborted, probably assertion fail)

    이라는 런타임 오류가 발생합니다. 제발 부탁드립니다 ㅠㅠ 이거

    해결하기 전에는 궁금해 미칠꺼같네요

    문제는 MAXSUM이고요 답은 나오는데 런타임 오류가 떠서 정답처리가

    안되네요 ㅠㅠ... 동적할당을 많이 사용햇지만 for문으로

    범위도 일일이 다 확인했고요. 예시도 많이 넣어봣는데 답이

    정확히 나오는데 계속 저 오류가 떠서 미치겠네요 ㅠㅠ....

    #include<stdio.h>
    #include<malloc.h>
    int main()
    {
        int temp=0;
        int Case;
        int **A=NULL;
        int *ANSWER=NULL;
        int *STACK=NULL;
        int N;
        int CHECK=0;
        int CN=0,AN=0,i=0,MINUS=0,neg=0,pos=0,TA=0;
        scanf("%d",&Case);
        A=(int **)malloc(sizeof(int)*Case);
        ANSWER=(int *)malloc(sizeof(int)*Case);
        for(i=0;i<Case;i++)
        {
            ANSWER[i]=0;
        }
        while(Case>0)
        {
    
            do
            {
                scanf("%d",&N);
            }while(0>N||100000<N);
            A[CN]=(int *)malloc(sizeof(int)*N);
            STACK=(int *)malloc(sizeof(int)*N);
    
    
            while(1)
            {
    
                for(i=0;i<N;i++)
                {
                    STACK[i]=0;
                }
                for(i=0;i<N;i++)
                {
                    do
                    {
                        scanf("%d",&A[CN][AN]);
                    }while(A[CN][AN]<-100||A[CN][AN]>100);
    
                    if(A[CN][AN]<0)
                    {
                        MINUS=1;
                    }
                    AN++;
                }
                if(MINUS==0)
                {
                    for(i=0;i<N;i++)
                    {
                        ANSWER[CN]+=A[CN][i];
                    }
                }else if(MINUS==1)
                {
                    for(i=0;i<N;i++)
                    {
                        if(A[CN][i]<0)
                        {
                            CHECK++;
                        }
                    }
                    if(CHECK==N)
                    {
                        ANSWER[CN]=A[CN][0];
                        for(i=0;i<N;i++)
                        {
                            ANSWER[CN]=ANSWER[CN]>A[CN][i+1]?ANSWER[CN]:A[CN][i+1];
                        }
                        break;
                    }
                }
                if(A[CN][0]<0)
                {
                    pos++;
                }else
                {
                    neg++;
                }
                for(i=0;i<N;i++)
                {
                    if(A[CN][i]>=0)
                    {
                        if(neg<pos)
                        {
                            neg+=2;
                        }
                        STACK[pos]+=A[CN][i];
                    }else if(A[CN][i]<0)
                    {
                        if(pos<neg)
                        {
                            pos+=2;
                        }
                        STACK[neg]+=A[CN][i];
                    }
                }
    
                AN=neg>pos?neg:pos;
    
                for(i=0;i<AN;i+=2)
                {
                    if(STACK[i]>=0)
                    {
                        if(AN>=i+2)
                        {
                            if(STACK[i+1]+STACK[i]>=0 && STACK[i+1]+STACK[i+2]>=0)
                            {
                                STACK[i]=STACK[i+1]+STACK[i];
                                STACK[i+1]=0;
                            }
                        }
                    }else if(STACK[i]<=0)
                    {
                        if(AN>=i+3)
                        {
                            if( STACK[i+2]+STACK[i+1]>=0 && STACK[i+2]+STACK[i+3]>=0)
                            {
                                STACK[i+1]=STACK[i+2]+STACK[i+1];
                                STACK[i+2]=0;
                            }
                        }
                    }
                }
                for(i=0;i<AN;i++)
                {
                    if(STACK[i]>=0)
                    {
                        TA+=STACK[i];
                    }else if(STACK[i]<0)
                    {
                        TA=0;
    
                        temp++;
                        continue;
                    }
                    STACK[temp]=TA;
    
                }
    
                for(i=0;i<temp;i++)
                {
                    if(i+1<temp+1)
                    {
                        ANSWER[CN]=STACK[i]>STACK[i+1]?STACK[i]:STACK[i+1];
                    }
                }
                break;
            }
            Case--;
            CN++;
            AN=0;
            MINUS=0;
            temp=0;
            CHECK=0;
        }
        for(i=0;i<CN;i++)
        {
            printf("%d\n",ANSWER[i]);
        }
    
        for(i=0;i<CN;i++)
        {
            free(A[i]);
        }
        free(A);
        free(ANSWER);
        free(STACK);
        return 0;
    }
    

    11년 전
2개의 댓글이 있습니다.
  • JongMan
    JongMan

    코드를 조금씩 주석처리 해보면서 어디에서 런타임 에러가 나는지 확인해 보시는 건 어떨까요?


    11년 전 link
  • issuemine
    issuemine

    감사합니다 에러가 뜨는 이유를 알앗어요 ^^


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