none
xtgmath.h pow()함수 overloading RRS feed

  • 질문


  • os : windows server 2008 x64, server 2008 R2 x64

    compile : vs2013 


    어플리케이션 하나를 만들어서 돌리고 있는데요. pow()함수를 사용하게 되었습니다. 그런데 전달 인자 타입을 잘못줘서 pow(int, int)가 호출되게 되었습니다. 이 pow()는  xtgmath.h의 pow(const _Ty1 _Left, const _Ty2 _Right)가 호출되는 것을 windbg로 확인했습니다. 물론 crash나는 문제는 타입을 변경해서 math.h안에 있는 pow(double, int)를 호출하게끔 변경해서 처리했습니다. 


    그런데 문제가 난 부분에서 OS에 따라서 crash의 차이가 나와서 질문드립니다. 

    질문 ) server 2008에서 xtgmath.h의 pow(const _Ty1 _Left, const _Ty2 _Right)를 호출하면 crash나는데, server 2008 R2는 crash가 나지 않습니다. Server 2008 R2를 pow를 bp 걸어서 winDbg로 봤는데 동일한 pow(const _Ty1 _Left, const _Ty2 _Right)를 호출하고 있습니다. 심지어 전달인자가 쓰레기 값인것 까지 동일합니다. 

    2008 : pow<int,int>(int _Left = 0n-858993460, int _Right = 0n-858993460)

    2008 R2 : pow<int,int>(int _Left = 0n-858993460, int _Right = 0n-858993460)

    2008의 winDbg bp에서 step out/over로 진행하면 아래의 메세지가 나옵니다. 

    ----------------------------------------------------------------------------------

    (870.6d0): Illegal instruction - code c000001d (first chance)
    (870.6d0): Illegal instruction - code c000001d (!!! second chance !!!)
    testps!pow+0xba1:
    00000001`40357bb1 c5fb11442410    vmovsd  qword ptr [rsp+10h],xmm0 ss:00000000`0022dba0=000000000022dc00

    ----------------------------------------------------------------------------------

    아시는 분이 있으시다면 답변 부탁드립니다. 



    • 편집됨 Paul17Kim 2017년 12월 15일 금요일 오전 6:44
    2017년 12월 15일 금요일 오전 6:40

답변