XHAENEUNG RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)발생이요ㅠ

  • nomo4473
    nomo4473

    아래의 코드를 제출했을때
    RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)오류가 발생을 하는데요....

    이런식으로 질문을 올리면 안되는거 같긴하지만 아무리 해도 원인을 못찾겠어서 도움을 좀 부탁드립니다ㅠ

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int GetIsPass(char* strFirstIndex,char cOperation,char* strSecondIndex,char* strResult)
    {
        int i,j,k;
        char* strNumber[11] = {"zero","one","two","three","four","five","six","seven","eight","nine","ten"};
        int nNumber[11] = {0,1,2,3,4,5,6,7,8,9,10};
        int nFirstIndex = -1;
        int nSecondIndex = -1;
        int nResult = -1;
        int nResultLength = -1;
        char temp;
        for(i = 0;i < sizeof(strNumber)/4;i++)
        {
            if(strstr(strFirstIndex,strNumber[i])!=NULL)
            {
                nFirstIndex = i;
            }
    
            if(strstr(strSecondIndex,strNumber[i])!=NULL)
            {
                nSecondIndex = i;
            }
        }
    
        if(cOperation == '+')
        {
            nResult = nFirstIndex + nSecondIndex;
        }else if(cOperation == '*')
        {
            nResult = nFirstIndex * nSecondIndex;
        }else
        {
            nResult = nFirstIndex - nSecondIndex;
        }
    
        if(nResult<0 || nResult>10)
            return 0;
        if(strlen(strNumber[nResult])!=strlen(strResult))
            return 0;
    
        nResultLength = strlen(strNumber[nResult]);
        for(i = 0;i<nResultLength;i++)
        {
            for(j=0;j<nResultLength;j++)
            {
                if(strNumber[nResult][i]==strResult[j])
                {
                    temp = strResult[j];
                    strResult[j] = strResult[i];
                    strResult[i] = temp;
                }
            }
        }
    
        if(strcmp(strNumber[nResult],strResult)==0)
            return 1;
        else 
            return 0;
    }
    
    int main()
    {
        int i = -1;
        char cOperation;
        char strFirstIndex[6];
        char strSecondIndex[6];
        char strResult[11];
        int nTestCase = -1;
        int* nResult;
        int test = sizeof(strFirstIndex);
        memset(strFirstIndex,0,sizeof(strFirstIndex));
        memset(strSecondIndex,0,sizeof(strSecondIndex));
        memset(strResult,0,sizeof(strResult));
        scanf("%d",&nTestCase);
        nResult = (int*)malloc(sizeof(int)*nTestCase);
        for(i = 0;i<nTestCase;i++)
        {
            scanf("%s %c %s = %s",strFirstIndex,&cOperation,strSecondIndex,strResult);
            nResult[i] = GetIsPass(strFirstIndex,cOperation,strSecondIndex,strResult);
        }
    
        for(i = 0;i<nTestCase;i++)
        {
            if(nResult[i])
            {
                printf("Yes");
            }else
            {
                printf("No");
            }       
        }
        free(nResult);
        return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • newcomet
    newcomet

    sizeof(strNumber)/4 값이 얼마가 나오나 확인해 보세요.


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