A running man 2016-03-04 08:29 采纳率: 0%
浏览 1633
已结题

Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!!

 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条回答

  • threenewbee 2016-03-05 23:22
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!