내 코드에 이상한 문제가 있습니다. 여기에 컨텍스트가 있습니다 : 내 메서드에서 나는 객체를 만든 다음이 객체의 (int) 버퍼에 두 개의 "for 루프"의 데이터를 채 웁니다.for 루프에서 결과를 변경하는 이상한 동작
문제는 내 루프에 printf를 삽입하여 버퍼에있는 데이터를 보면 버퍼의 데이터가 변경된다는 것입니다. 상기 루프 내부의 printf 여부
을 Heres의 내 코드가 있다면 실제로, 버퍼의 결과는 어쩌면 이해하는 데 도움이 될 수 있습니다, 다른 :
bool Mod::Realiser(FFTResult * inputdata,FFTSample_s * & moduleData){
bool done = true;
float module;
unsigned int r,n;
moduleData = new FFTSample_s(NbPointsSample);
unsigned int limit = NbPointsSample >> 1;
int iGain= 0;
for (n = CentrageFFT, r = 0; r < limit; n++, r++)
{
module = inputdata->buffer[n][0] * inputdata->buffer[n][0] + inputdata->buffer[n][1] * inputdata->buffer[n][1];
// printf(" M = %lf\n",module);
moduleData->buffer[r] = (int)(10.0*log10(module)) + iGain;
}
for (n = 0; n < limit; n++, r++)
{
module = inputdata->buffer[n][0] * inputdata->buffer[n][0] + inputdata->buffer[n][1] * inputdata->buffer[n][1];
moduleData->buffer[r] = (int)(10.0*log10(module)) + iGain;
}
/* for (int i=0;i<2048;i++){
printf(" X = %lf \n",inputdata->buffer[i][0]);
printf(" Y = %lf \n",inputdata->buffer[i][1]);
printf(" M = %d\n",moduleData->buffer[i]);
}*/
일종의 오버플로 문제 인 것 같습니다. – keyser
당신은 ['printf'] (http://en.cppreference.com/w/cpp/io/c/fprintf)의''% lf "'포맷이 무엇을 의미하는지 알고 있습니까? 즉,'double'을 출력하려고하지만'float'을 제공합니다. 왜 출력을 위해 타입 안전'std :: cout'을 사용하지 않습니까? –
valgrind를 사용해보세요. 관련된 유형의 대부분과 그 내용을 알지 못하면 (예 :이 버퍼 변수가 무엇을 말하는지조차 알지 못함) 어떻게 생존했는지, 우리는 추측 할 수밖에 없습니다. – PlasmaHH