이 함수는 2 개의 벡터가 서로 비교되고 프로그램이 벡터와의 차의 제곱의 합을 찾는다. 내가 값을 오름차순으로 정렬하려고 할 때 제곱 차이 값의 합을 모두 표시 할 수 있습니다C++ 포인터 배열을 오름차순으로 정렬
double Search::NNS(vector<vector<double>> bb, vector<vector<double>> aa)
{
int M = 768; int N = 1024;
int R = 49; int C = 36;
//double SSD[] = MainVectorBlock[] - WallyVector[];
//double SSD[] = SSD[] * SSD[];
//sum = sum + SSD[];
vector<vector<double>> &MainIMG = bb;
vector<vector<double>> &WallyIMG = aa;
double *SSD = new double[R*C];
double sum = 0;
for (int bx = 0; bx < M; bx += R)
for (int by = 0; by < N; by += C)
{
Compare = new double*[R];
for (int x = 0; ((x < R) && ((bx + x) < M)); ++x)
{
Compare[x] = new double[R];
for (int y = 0; ((y < C) && ((by + y) < N)); ++y)
{
if ((bx + x) >= M)
{
cout << Compare[bx + x] << Compare[by + y] << " ";
}
//cout << MainIMG[bx + x][by + y] << " ";
Compare[x][y] = MainIMG[bx + x][by + y] - WallyIMG[x][y];
Compare[x][y] = Compare[x][y] * Compare[x][y];
//sum += Compare[x][y];
SSD[R*C] += Compare[x][y];
//SSD[R*C] = sum;
//cout << Compare[x][y] << " ";
}
}
//cout << "\n\n\n" << endl;
//cout << sum << endl;
//cout << SSD[R*C] << "\t" << sum << endl;
for (int i = 0; i < R*C; i++)
{
for (int j = 0; j < R*C; j++)
{
if (SSD[i] > SSD[j])
{
int temp = SSD[i];
SSD[i] = SSD[j];
SSD[j] = temp;
}
}
}
}
for (int a = 0; a < R*C; a++)
{
cout << SSD[a] << endl;
}
return 0;
}
그러나,이 값 -6.27744e + (66)를 받고 계속. 루프를 변경하여 기본 for-loop 전체에 배치하려고 시도했지만 그 값을 계속 유지합니다.
이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –
-6.27744e + 66은 나에게 두 배로 된 초기화되지 않은 부동 소수점처럼 보입니다. 배열의 범위 내에서 항상 요소를 읽었습니까? – Bathsheba
@ πάνταῥεῖ 디버거를 사용 했는데도 왜 이런 일이 일어나는지 알 수 없습니다. – MR1