릴리스 버전 문제와 관련하여 많은 답변을 찾았지만 그 반대는 없습니다.C++ 색인 변수가 디버그 버전에서 근본적으로 변경됨
while(index < 7 && FlagIsUp)
{
// process
Inner Loop
Inner Inner Loop
Array[index] = number;
++index;
}
문제점 인덱스를 size_t위한 int16_t 대 17,209 및 1,133,165,442 6 (마지막 반복)에서 급격하게 변화이다
I는 다음과 유사한 루프를 갖는다. 루프 안쪽에 ++ 인덱스를 제외하고 인덱스가 변경됩니다. 나는 for를 for로 바꾸었고 여전히 발생합니다.
디버그 모드에서만 발생하며 릴리스 버전에서는 문제없이 완료됩니다.
색인에 volatile도 추가했으며 결과는 동일했지만 여전히 넘쳤습니다.
어떤 아이디어, 포인터, 감사하겠습니다. 어떤 이론을 환영 할 수 있도록 버그의 작업 복사본을 제공 할 수는 없지만 문제점을 찾기 위해 옵션을 다 써 버리고 싶습니다.
편집 : 예 죄송합니다. 나는 거의 정보를주지 않았다. 우선 QNX Momentics 버전 : 4.6.0을 사용하고 있으며 디버거는 GNU Compiler Collection 4.3.3의 일부입니다.
지금 내부 루프는 이것이다 :
cSignalNoIndex = 0;
while ((cSignalNoIndex < (2 * NO_PHASES + 1)) && !ShutDownFlag)
{
wSF0 = 0;
wExtSF = 0;
dwSFAcc = 0;
dwExtSFAcc = 0;
std::string SignalNo= " Waveform number " + Tool::toString(cSignalNoIndex);
Results[cSignalNoIndex].printWaveForm(SignalNo);
// Prepare Input vectors for FFT compute
cComponent = 0;
while (cComponent < (HCYCLE_SAMPLES << 1))
{
awReal[cComponent] = static_cast<int>(Results[cSignalNoIndex].WaveForm[cComponent/64][cComponent % 64]);
awImg[cComponent] = 0;
pwSource++;
cComponent++;
}
Results[cSignalNoIndex].printWaveForm(SignalNo);
// Get FFT (forward)
// Changed the wPwr from 7 to something else
iFft(&awReal[0], &awImg[0], wPwr, 1);
Results[cSignalNoIndex].printWaveForm(SignalNo);
// Compute magnitudes
//fMult = pInBlock3->fMult[cSignalNoIndex]; // Get Multiplier
fMult = 1;
for (cComponent = 0; cComponent < HCYCLE_SAMPLES && !ShutDownFlag; cComponent++)
{
int64_t dlOp = static_cast<int64_t>(awReal[cComponent]) * awReal[cComponent] + static_cast<int64_t>(awImg[cComponent]) * awImg[cComponent];
dlOp <<= 1; // Apply sqrt(2) term to result
dlOp = static_cast<int>(fMult * isqrt64(dlOp));
// Store into FFT object
oFFTMag3.wFFT[cSignalNoIndex][cComponent] = static_cast<int16_t>(dlOp);
// Set Base frequency magnitude and accumulate harmonics
if (cComponent == 1) // Base
{
wSF0 = dlOp;
if(cSignalNoIndex == 6)
{
wRefMagnitude = static_cast<int16_t> (0.4 * wSF0);
}
if(awReal[1] != 0) // Also get phase for Base
{
dfPhase = std::atan((double)((float)awImg[1]/awReal[1])) * 180.0/PI;
}
else
{
if(awImg[1] >= 0)
{
dfPhase = 90.0;
}
else
{
dfPhase = -90.0;
}
}
if(awReal[1] < 0) // convert to 2*PI range
{
dfPhase += 180.0;
}
else if(awImg[1] < 0)
{
dfPhase += 360.0;
}
//// THIS IS THE LINE
fPhase[cSignalNoIndex] = dfPhase; ////////// WTF! cSignalNoIndex = 6 - cComponent = 2
/// HERE cSignalNoIndex is overflown
}
}
"내부 루프"및 "내부 내부 루프"의 내용없이 도울 방법이 없습니다 ... –
"이론", 스택을 손상 시켰습니다. – Chad
어쩌면 스택을 어딘가에 스매싱하고 있습니다. 실제 코드를 보여 주면 도움이 될 것입니다. –