2 sinat 22235451 sinat_22235451 于 2016.03.04 16:29 提问

Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!! 1C
 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时出错,这只是我的个人猜测,有没有大神能指出来啊?

图片说明

图片说明

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 07:22

明显是你的二级指针指向了未知的区域,应该是内存没有分配的错误。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!