2010-11-25 4 views
0

내가 원하는 하나 복사되는 모든 :C++ 코드에 정말 이상한 오류가 발생했습니다. 매개 변수는</p> <p>이미지는 설명 할 수 .. 쓰레기 값이 아니라 내가 여기에 놓친 어디에서 찾을 수 없기 때문에 나는 내가 얼마나 화가 설명 할 수 있다고 생각하지 않습니다

디버그 스크린 샷, nxxx 값 (n이라고 부르는 데 사용되지만 그 시시한 변수는 멋진 이름이 필요하지 않습니다). 중단 점은이 메서드의 첫 번째 줄에있었습니다.

http://img202.imageshack.us/img202/5057/value.png

방법은 getAgetB은 ... 모든 것을 10 분 전 같이 일하는 작업, 호출되는 코드 ..

먼저 주석, 두 번째 댓글이 원래의 코드 메서드 시그니처입니다 , 이것은 작동해야한다. 편집

/* 
    void HASAntData::init(float** A, 
     float** B, 
     int nxxx, 
     int R, 
     float q, 
     float Q, 
     float q1, 
     float q2, 
     int S, 
     int maxrounds, 
     int nThreads, 
     int seed) 
    */ 

    data->init(qap->getA(), 
       qap->getB(), 
       0, 
       1, 
       2, 
       3, 
       4, 
       5, 
       6, 
       7, 
       8, 
       9); 

    /* 
    data->init(qap->getA(), 
       qap->getB(), 
       0, 
       cudahas_R, 
       cudahas_q, 
       cudahas_Q, 
       cudahas_q1, 
       cudahas_q2, 
       cudahas_S, 
       cudahas_max_rounds, 
       cudahas_m, 
       Tools::randomInt(0, INT_MAX)); 
       */ 

(는 아무것도 바꿀 것 있는지 0n 변수를 대체 .. 밝혀졌다 그것을하지 않았다) : 여기

모든 변수 값으로 테이블의, 교차 한 문제가되지 않습니다 이 문제는 최적화 된 빌드를 사용하지

http://img831.imageshack.us/img831/6224/valuestable.png

+0

"모든 것이 10 분 전처럼 작동했다면"Ctrl + Z를 몇 번 눌러 보면서 변경 한 사항을 확인하십시오. –

+4

나중에 참조 할 수 있도록 코드 스크린 샷을 찍지 말고 질문에 이미지를 포함시키지 마십시오. 특히 코드/데이터를 복사하여 붙여 넣기 만하면됩니다. 각 줄을 4 칸으로 들여 쓰기하여 쉽게 포맷 할 수 있습니다 (Ctrl + K를 사용하면 빠르게 할 수 있습니다). 또한 실제 텍스트 대신 이미지를 포함시킴으로써 코드를 시험해 볼 의사가있는 많은 사람들을 배제 할 수는 있지만 복사/붙여 넣기를 할 수 없기 때문에 불가능합니다. –

+0

@James McNellis, 내가 물건을 바꿨 기 때문에. 어제 내가 생성자에게 모든 인수를 전달, 지금은 그것을 변경하고 난 init 메서드에 모든 것을 전달 해요. – hfingler

답변

0

모든 값이 이동 한 것 같습니다 (Q는 3 대신 2, q1은 4 대신 3, R은 1 대신 0입니다). int가 float로 해석되면 이상한 값이 예상됩니다.

B의 값을보고 있어야합니다.

init의 정의와 선언간에 약간의 불일치가 있습니까?

+0

나는 극지방이 프로젝트를 완전히 청소하고 다시 만들 것을 제안합니다. –

+0

여기에'void HASAntData :: init (float ** B, int nxxx, int R, float q, float q, float q1, float q2, int S, int maxrounds, int nThreads, int seed)가 있습니다.)'와'void init (float **, float **, int, int, float, float, float, float, int, int, int, int); 이러한 테스트 값을 명시 적으로 캐스팅 해보세요. – hfingler

+0

@In silico, 나는 내일이 메소드를 다시 만들 것이며, 모든 것을 생성자로 옮기고 init 메소드를 제거 할 것입니다. – hfingler

0

일부 변수 확인을 어떻게 참조, 일부는? 그렇다면 디버거를 혼동시킬 수 있습니다.

그렇지 않으면 AppVerifier를 사용하여 일반적인 메모리 손상을 찾습니다.

+0

아니요, 프로젝트의 속성/옵션에서 아무 것도 변경하지 않았습니다. 디버거 문제 만은 아닙니다. 내 GPGPU에 공간을 할당하기 위해'n' 변수를 사용합니다. 변수가 불쾌한 값에 도달 할 수 있기 때문에 메모리 부족 예외가 발생합니다. – hfingler

+0

@polar, 당신이 속성을 변경했다고 말하지는 않았지만 디버깅중인 현재 빌드를 확인하고 최적화가 켜져 있는지 확인하는 것이 좋습니다. –