include<iostream>
include<fstream>using namespace std;
typedef struct sourcedata //声明了一个原始数据结构体
{
int m; //矩阵的行rows
int n; //矩阵的列columns
double **data; //保存数据的二维指针
}SourceData;
SourceData getdata() //读取文档中的数据,以二维指针的方式对数据进行存储,数据保存为txt格式
{
const char *File = "f:\\test1213.txt"; //数据的位置
SourceData dat;
ifstream testdata;
testdata.open(File);
if (!testdata)
{
cout << "cannot open" << endl;
}
testdata >> dat.m;
testdata >> dat.n;
dat.data = new double*[dat.m];
for (int i = 0; i < dat.m; i++)
dat.data[i] = new double[dat.n];
for (int i = 0; i < dat.m; i++)
for (int j = 0; j < dat.n; j++)
testdata >> dat.data[i][j];
return dat;
testdata.close();
}
void main()
{
sourcedata pp;
pp = getdata();
double **x = NULL; //原始数据指针
x = pp.data;
int rows = pp.m;
int columns = pp.n;
double **Distance;
long double sum;
Distance = new double *[rows];
for (int i = 0; i < rows; i++)
Distance[i] = new double[columns];
for (int i = 0; i < rows; i++)
{
for (int j = 627; j < rows; j++)
{
double sum = 0;
for (int k = 0; k < columns; k++)
{
**sum += (*(*(x + i) + k) - *(*(x + j) + k))*(*(*(x + i) + k) - *(*(x + j) + k)); //总是在此处出bug**
}
sum = sqrt(sum);
Distance[i][j] = sum;
*(*(Distance + i) + j) = sum;
}
}
ofstream file1;
file1.open("距离计算的test.txt");
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
file1 << *(*(Distance + i) + j) << " ";
}
file1 << "\n";
}
for (int i = 0; i < rows; i++) //释放指针
delete[rows]Distance[columns];
delete[rows]Distance;
}
当数据矩阵不是很大时比如,200X16的矩阵时就不会有bug,但是当矩阵达到4096X16的时候,在“sum += (*(*(x + i) + k) - ((x + j) + k))*(*(*(x + i) + k) - ((x + j) + k));”总会出现宕机情况,一开始是觉得数据的溢出,后来经过调试发现应该不是溢出的问题。
个人觉得应该是声明的二级指针在double **Distance; 在读取原始矩阵X时出错,这只是我的个人猜测,有没有大神能指出来啊?