2011-10-04 4 views
2

나는 내가 이해할 수없는 매우 이상한 문제가있다.한 함수에서 다른 함수로 전달 된 값이 변경됩니다 ... 이유를 알아낼 수 없습니까?

//below are the values being passed 
//long numTreePeriods = 80 
//double length = 0.23013698630136986 
TTimeLineInfo* tlInfo = GtoTimeLineInfoNew((long)ceil(numTreePeriods/length), /*ppy*/ 
           0L, 
           1, 
           FALSE); 

지금 여기 위라는 GtoTimeLineInfoNew 함수의 서명은 다음과 같습니다 :

__declspec(dllexport) TTimeLineInfo* GtoTimeLineInfoNew 
    (long    minPPY,  /* (I) Min # ppy before switchDate */ 
    TDate   switchDate, /* (I) If 0, ignore ppy2; only use minPPY*/ 
    long    minPPY2,  /* (I) Min # ppy after switchDate */ 
    TBoolean   wholeDayTPs); 

내 코드를 디버깅 및 함수에 단계 값이 I 위의 규정에

는 C 코드 얻을 수 :

minPPY = -1636178017 

????? 이러한 유형의 행동을 일으킬 수있는 요인은 무엇입니까?

정확하게 C 코드는 DLL입니다. C++/CLI로 래핑합니다. 그럼에도 불구하고 문제는 그 것으로부터 독립적으로 보입니다 ....

+0

어디에서이 값을 관찰하기 위해 중단 점을 설정 했습니까? 기능의 몸 안에? –

+0

함수에서 실제로 minPPY로 무엇을합니까? – FloppyDisk

+0

코드의 첫 번째 부분에서 함수 호출에 중단 점을 넣은 다음 몇 줄을 건너 뛰어 값이 표시되는지 확인합니다. 이 함수는 minPPY가 복사되는 필드를 포함하는 TTimeLineInfo 데이터 구조를 초기화하고 ... ds ....를 반환합니다. 문제는 잘못된 값이 필드에 복사된다는 것입니다 ... – nche

답변

0

어떤 이유로 인해 ceil(numTreePeriods/length)은 매우 이상한 것을 제공하고있었습니다. 그래서 나는 나 자신이 문제를 해결하기 위해 올림 함수를 ... 쓴

UPDATE :처럼이 glglgl에 의해 코멘트에 강조

, 적절한 헤더가 누락 된, 따라서 천장을 만들다 재미 값을 주도 int를 반환하는 것으로 해석되었다 ...

+0

은 적절한 헤더가 누락 되었습니까? 'ceil()'은'double'을 리턴합니다. 헤더가 없으면,'int'를 반환하도록 해석되고 일이 일어납니다. – glglgl

0

확실하지 않습니다. 하지만 내 생각에 매개 변수가 C 함수 대 C++ 함수로 전달되는 방법의 차이점이 있습니다. 시도 :

extern "C" __declspec(dllexport) TTimeLineInfo* GtoTimeLineInfoNew ... 
관련 문제