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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)