【发布时间】:2017-05-07 22:18:18
【问题描述】:
我有这个函数,其中两个向量相互比较,程序找到向量的平方差之和。
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 循环中,但我仍然继续获得该值。
【问题讨论】:
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
-6.27744e+66 对我来说看起来像是一个未初始化的浮点 double。你确定你一直在读取数组边界内的元素吗?
-
@πάνταῥεῖ 我已经使用了调试器,但我仍然无法弄清楚为什么会发生这种情况
-
@MR1 -- 另外,这里有很大比例的内存泄漏:
Compare = new double*[R];。同样,为什么不std::vector<std::vector<double>> Compare(R, std::vector<double>(R));放弃所有new[]的东西? -
SSD[R*C] += Compare[x][y];-- 这也是内存覆盖。你在数组末尾写一个。
标签: c++ arrays pointers for-loop bubble-sort