• c++ 类内部 使用 new delete


    低级错误:

     1 /**
     2 * @clusterNums 默认为5 分类数目
     3 * @xyVector 处理后点云数据 x y顺序存储 
     4 */
     5 int GMM::runGMM(int clusterNums, const std::vector<db::Point2f> & xyVector, std::vector<db::pointCuster> & xyCusterVector){
     6 
     7     int dim = 2;
     8 
     9     datanums = xyVector.size();
    10     data = new double*[datanums];
    11 
    12     for (int i = 0, j = 0; j < xyVector.size(); j++, i++)
    13     {
    14         data[i] = new double[dim];
    15         data[i][0] = xyVector[j].x;
    16         data[i][1] = xyVector[j].y;
    17     }
    18     GMM gmm;
    19     result = gmm.GMM_Cluster(data, datanums, dim, clusterNums);
    20     //multimap<int, pair<double, double>>cluster;
    21     vector<vector<int>>clusters;
    22     clusters.resize(clusterNums);
    23 
    24     for (int i = 0; i < datanums; i++)
    25     {
    26         //cluster.insert(pair<int, pair<double, double>>
    27         //    (result[i], pair<double, double>(data[i][0], data[i][1])));
    28         clusters[result[i]].push_back(i);
    29         //cout << result[i] << endl;
    30     }
    31 
    32     for (int i = 0; i < clusterNums; i++)
    33     {
    34         db::pointCuster tempCuster;
    35         xyCusterVector.push_back(tempCuster);
    36 
    37         for (int j = 0; j < clusters[i].size(); j++)
    38         {
    39             db::Point2f tempPoint;
    40             xyCusterVector[i].push_back(tempPoint);
    41 
    42             xyCusterVector[i][j].x = data[clusters[i][j]][0];
    43             xyCusterVector[i][j].y = data[clusters[i][j]][1];
    44         }
    45     }
    46 
    47     return 0;
    48 }

    总结:一定不要在类的内部,实例化它自己的对象,导致内存释放错误。

  • 相关阅读:
    Java实现连接FTP服务并传递文件
    消息队列(MQ)入门-activemq,rocketmq代码级别
    js分页功能实现
    记录几个遇到的问题和解决方法
    oracle 日志归档设置
    打印系统时间
    linux 定时任务
    linux 安装jdk
    db2 命令
    二维码、条形码扫描——使用Google ZXing
  • 原文地址:https://www.cnblogs.com/lovebay/p/10474909.html
Copyright © 2020-2023  润新知