From 571bdc2ad32b583da39da34f0edc4577a8f9906e Mon Sep 17 00:00:00 2001 From: Howard Soh Date: Wed, 9 Oct 2024 21:01:52 +0000 Subject: [PATCH] #2673 SonarQube findings: use vector for the dynamic memory allocation --- src/basic/vx_math/hist.cc | 12 +- src/basic/vx_math/hist.h | 3 +- src/basic/vx_math/legendre.cc | 12 +- src/basic/vx_math/legendre.h | 8 +- src/basic/vx_math/ptile.cc | 4 +- src/basic/vx_util/num_array.cc | 89 +++++++-------- src/libcode/vx_nc_obs/nc_obs_util.cc | 72 +++++------- src/libcode/vx_python3_utils/wchar_argv.cc | 7 +- src/libcode/vx_shapedata/shapedata.cc | 27 ++--- src/tools/core/mode/mode_exec.cc | 124 ++++++++------------- src/tools/other/lidar2nc/lidar2nc.cc | 38 +++---- 11 files changed, 158 insertions(+), 238 deletions(-) diff --git a/src/basic/vx_math/hist.cc b/src/basic/vx_math/hist.cc index d0bcd924e1..c5d2c89133 100644 --- a/src/basic/vx_math/hist.cc +++ b/src/basic/vx_math/hist.cc @@ -51,7 +51,7 @@ Histogram::~Histogram() { -if ( Count ) { delete [] Count; Count = (int *) nullptr; } +Count.clear(); } @@ -93,7 +93,7 @@ void Histogram::init_from_scratch() { -Count = (int *) nullptr; +Count.clear(); Nbins = 0; @@ -120,9 +120,7 @@ void Histogram::clear() { -int j; - -for (j=0; j #include @@ -28,7 +29,7 @@ class Histogram { private: - int * Count; + std::vector Count; int Nbins; diff --git a/src/basic/vx_math/legendre.cc b/src/basic/vx_math/legendre.cc index 6a7b78e269..f04741135f 100644 --- a/src/basic/vx_math/legendre.cc +++ b/src/basic/vx_math/legendre.cc @@ -117,9 +117,9 @@ void Legendre::init_from_scratch() { -P = 0; +P.clear(); -PP = 0; +PP.clear(); clear(); @@ -135,9 +135,9 @@ void Legendre::clear() { -if ( P ) { delete [] P; P = nullptr; } +P.clear(); -if ( PP ) { delete [] PP; PP = nullptr; } +PP.clear(); X = 0.0; @@ -201,9 +201,9 @@ clear(); MaxDegree = N; -P = new double [N + 1]; +P.resize(N + 1); -PP = new double [N + 1]; +PP.resize(N + 1); calc(0.0); diff --git a/src/basic/vx_math/legendre.h b/src/basic/vx_math/legendre.h index 4d0265801f..b9af82db02 100644 --- a/src/basic/vx_math/legendre.h +++ b/src/basic/vx_math/legendre.h @@ -19,6 +19,10 @@ #define __VX_LEGENDRE_H__ +//////////////////////////////////////////////////////////////////////// + +#include + //////////////////////////////////////////////////////////////////////// @@ -37,9 +41,9 @@ class Legendre { double X; // last x value - double * P; // allocated + std::vector P; // allocated - double * PP; // allocated + std::vector PP; // allocated public: diff --git a/src/basic/vx_math/ptile.cc b/src/basic/vx_math/ptile.cc index e3253631f6..3618ae9ad4 100644 --- a/src/basic/vx_math/ptile.cc +++ b/src/basic/vx_math/ptile.cc @@ -215,11 +215,10 @@ if ( n <= 1 ) return 0; int i, j, ties_current, ties_total, tie_rank_start = 0, tie_rank_end; double tie_rank_mean; RankInfo *rank_info = (RankInfo *) nullptr; -double *ordered_array = (double *) nullptr; +vector ordered_array(n); double prev_v, v; rank_info = new RankInfo [n]; -ordered_array = new double [n]; // Each RankInfo structure contains a index value from 0 to n-1 and a pointer // to the data to be ranked @@ -296,7 +295,6 @@ if(ties_current != 0) { } if(rank_info) { delete [] rank_info; rank_info = (RankInfo *) nullptr; } -if(ordered_array) { delete [] ordered_array; ordered_array = (double *) nullptr; } return ties_total; diff --git a/src/basic/vx_util/num_array.cc b/src/basic/vx_util/num_array.cc index cb5046c8a6..5a7fcee4c9 100644 --- a/src/basic/vx_util/num_array.cc +++ b/src/basic/vx_util/num_array.cc @@ -123,7 +123,7 @@ void NumArray::init_from_scratch() { clear(); - + return; } @@ -171,7 +171,7 @@ void NumArray::assign(const NumArray & a) clear(); e = a.e; - + Sorted = a.Sorted; return; @@ -209,7 +209,7 @@ void NumArray::dump(ostream & out, int depth) const int j; for (j=0; j " - << "memory allocation error\n\n"; - - exit ( 1 ); + vector data (n); + vector data_loc (n); + vector data_rank (n); - } + //if ( !data || !data_loc || !data_rank ) { + // + // mlog << Error << "\nint NumArray::rank_array() -> " + // << "memory allocation error\n\n"; + // + // exit ( 1 ); + // + //} // // Search the data array for valid data and keep track of its location @@ -679,20 +677,13 @@ int NumArray::rank_array(int &ties) // Compute the rank of the data and store the ranks in the data_rank array // Keep track of the number of ties in the ranks. // - ties = do_rank(data, data_rank, n_vld); + ties = do_rank(data.data(), data_rank.data(), n_vld); // // Store the data_rank values // for(i=0; i hdr_typ_idx_block(buf_size); + vector hdr_sid_idx_block(buf_size); + vector hdr_vld_idx_block(buf_size); + vector hdr_lat_block(buf_size); + vector hdr_lon_block(buf_size); + vector hdr_elv_block(buf_size); LongArray offsets; // = { 0, 0 }; LongArray lengths; // = { 1, 1 }; @@ -685,7 +685,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { else { // Get the corresponding header message type (index, not string) if(!get_nc_data(&hdr_typ_var, - hdr_typ_idx_block, lengths_1D, offsets_1D)) { + hdr_typ_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_typ\n\n"; exit(1); @@ -693,7 +693,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the corresponding header station id (index, not string) if(!get_nc_data(&hdr_sid_var, - hdr_sid_idx_block, lengths_1D, offsets_1D)) { + hdr_sid_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_sid\n\n"; exit(1); @@ -701,7 +701,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the corresponding header valid time (index, not string) if(!get_nc_data(&hdr_vld_var, - hdr_vld_idx_block, lengths_1D, offsets_1D)) { + hdr_vld_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_vld\n\n"; exit(1); @@ -711,19 +711,19 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the header for this observation // if(!get_nc_data(&hdr_lat_var, - hdr_lat_block, lengths_1D, offsets_1D)) { + hdr_lat_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_lat\n\n"; exit(1); } if(!get_nc_data(&hdr_lon_var, - hdr_lon_block, lengths_1D, offsets_1D)) { + hdr_lon_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_lon\n\n"; exit(1); } if(!get_nc_data(&hdr_elv_var, - hdr_elv_block, lengths_1D, offsets_1D)) { + hdr_elv_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_elv\n\n"; exit(1); @@ -739,13 +739,6 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { } } - delete[] hdr_typ_idx_block; - delete[] hdr_sid_idx_block; - delete[] hdr_vld_idx_block; - delete[] hdr_lat_block; - delete[] hdr_lon_block; - delete[] hdr_elv_block; - if (!has_array_vars) { int tmp_dim_size; @@ -860,40 +853,40 @@ bool NetcdfObsVars::read_obs_data(int buf_size, int offset, } } else { - int *obs_hid_buf = new int[buf_size]; - int *obs_vid_buf = new int[buf_size]; - float *obs_lvl_buf = new float[buf_size]; - float *obs_hgt_buf = new float[buf_size]; - float *obs_val_buf = new float[buf_size]; + vector obs_hid_buf(buf_size); + vector obs_vid_buf(buf_size); + vector obs_lvl_buf(buf_size); + vector obs_hgt_buf(buf_size); + vector obs_val_buf(buf_size); lengths[1] = 1; - if(!get_nc_data(&obs_hid_var, obs_hid_buf, lengths, offsets)) { + if(!get_nc_data(&obs_hid_var, obs_hid_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record for observation " << "index " << offset << "\n\n"; result = false; } if(!get_nc_data((IS_INVALID_NC(obs_gc_var) ? &obs_vid_var : &obs_gc_var), - obs_vid_buf, lengths, offsets)) { + obs_vid_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (vid or gc) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_lvl_var, obs_lvl_buf, lengths, offsets)) { + if(!get_nc_data(&obs_lvl_var, obs_lvl_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (lvl) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_hgt_var, obs_hgt_buf, lengths, offsets)) { + if(!get_nc_data(&obs_hgt_var, obs_hgt_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (hgt) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_val_var, obs_val_buf, lengths, offsets)) { + if(!get_nc_data(&obs_val_var, obs_val_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (val) for observation " << "index " << offset << "\n\n"; @@ -918,11 +911,6 @@ bool NetcdfObsVars::read_obs_data(int buf_size, int offset, } } - delete[] obs_hid_buf; - delete[] obs_vid_buf; - delete[] obs_lvl_buf; - delete[] obs_hgt_buf; - delete[] obs_val_buf; } return result; } @@ -955,9 +943,9 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { // Read PB report type int buf_size = ((pb_hdr_count > NC_BUFFER_SIZE_32K) ? NC_BUFFER_SIZE_32K : pb_hdr_count); - int *hdr_prpt_typ_block = new int[buf_size]; - int *hdr_irpt_typ_block = new int[buf_size]; - int *hdr_inst_typ_block = new int[buf_size]; + vector hdr_prpt_typ_block(buf_size); + vector hdr_irpt_typ_block(buf_size); + vector hdr_inst_typ_block(buf_size); for(int i_start=0; i_start NC_BUFFER_SIZE_32K) buf_size2 = NC_BUFFER_SIZE_32K; @@ -967,7 +955,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_prpt_typ_var) { // Get the corresponding header PB message type (string) if(!get_nc_data(&hdr_prpt_typ_var, - hdr_prpt_typ_block, lengths, offsets)) { + hdr_prpt_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_prpt_typ\n\n"; exit(1); @@ -977,7 +965,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_irpt_typ_var) { // Get the corresponding header In message type (string) if(!get_nc_data(&hdr_irpt_typ_var, - hdr_irpt_typ_block, lengths, offsets)) { + hdr_irpt_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_irpt_typ\n\n"; exit(1); @@ -987,7 +975,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_inst_typ_var) { // Get the corresponding header instrument type (string) if(!get_nc_data(&hdr_inst_typ_var, - hdr_inst_typ_block, lengths, offsets)) { + hdr_inst_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_inst_typ\n\n"; exit(1); @@ -1001,10 +989,6 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { } } - delete[] hdr_prpt_typ_block; - delete[] hdr_irpt_typ_block; - delete[] hdr_inst_typ_block; - } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/libcode/vx_python3_utils/wchar_argv.cc b/src/libcode/vx_python3_utils/wchar_argv.cc index a51eea0675..6a8aeead58 100644 --- a/src/libcode/vx_python3_utils/wchar_argv.cc +++ b/src/libcode/vx_python3_utils/wchar_argv.cc @@ -198,14 +198,11 @@ clear(); int j, k; int argv_len; -int * len = nullptr; +vector len(_argc); Argc = _argc; -len = new int [Argc]; - - // // total length of the argument string ... // @@ -285,8 +282,6 @@ for (j=0; j val(Nxy); // Compute the requested percentile of intensity for(int i=0; i Index(2*data.ny()); - if ( !Index ) { - - mlog << Error << "\nShapedata::convex_hull() -> " - << "memory allocation error\n\n"; - exit(1); - } + //if ( !Index ) { + // + // mlog << Error << "\nShapedata::convex_hull() -> " + // << "memory allocation error\n\n"; + // exit(1); + //} n = 0; @@ -889,8 +884,6 @@ Polyline ShapeData::convex_hull_old() const // done // - delete [] Index; Index = (int *) nullptr; - return hull; } diff --git a/src/tools/core/mode/mode_exec.cc b/src/tools/core/mode/mode_exec.cc index 2ee853f30b..943b57ae9a 100644 --- a/src/tools/core/mode/mode_exec.cc +++ b/src/tools/core/mode/mode_exec.cc @@ -1704,15 +1704,15 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) const ConcatString fcst_thresh = engine.conf_info.Fcst->conv_thresh.get_str(5); const ConcatString obs_thresh = engine.conf_info.Obs->conv_thresh.get_str(5); - float *fcst_raw_data = (float *) nullptr; - float *fcst_obj_raw_data = (float *) nullptr; - int *fcst_obj_data = (int *) nullptr; - int *fcst_clus_data = (int *) nullptr; + vector fcst_raw_data ; + vector fcst_obj_raw_data; + vector fcst_obj_data ; + vector fcst_clus_data ; - float *obs_raw_data = (float *) nullptr; - float *obs_obj_raw_data = (float *) nullptr; - int *obs_obj_data = (int *) nullptr; - int *obs_clus_data = (int *) nullptr; + vector obs_raw_data ; + vector obs_obj_raw_data; + vector obs_obj_data ; + vector obs_clus_data ; NcFile *f_out = (NcFile *) nullptr; @@ -1917,29 +1917,29 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) if ( info.do_raw ) { - fcst_raw_data = new float [grid.nx()*grid.ny()]; - obs_raw_data = new float [grid.nx()*grid.ny()]; + fcst_raw_data.resize(grid.nx()*grid.ny()); + obs_raw_data.resize(grid.nx()*grid.ny()); } if ( info.do_object_raw ) { - fcst_obj_raw_data = new float [grid.nx()*grid.ny()]; - obs_obj_raw_data = new float [grid.nx()*grid.ny()]; + fcst_obj_raw_data.resize(grid.nx()*grid.ny()); + obs_obj_raw_data.resize(grid.nx()*grid.ny()); } if ( info.do_object_id ) { - fcst_obj_data = new int [grid.nx()*grid.ny()]; - obs_obj_data = new int [grid.nx()*grid.ny()]; + fcst_obj_data.resize(grid.nx()*grid.ny()); + obs_obj_data.resize(grid.nx()*grid.ny()); } if ( info.do_cluster_id ) { - fcst_clus_data = new int [grid.nx()*grid.ny()]; - obs_clus_data = new int [grid.nx()*grid.ny()]; + fcst_clus_data.resize(grid.nx()*grid.ny()); + obs_clus_data.resize(grid.nx()*grid.ny()); } @@ -1954,7 +1954,7 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) // Extra nullptr checks to satisfy Fortify if ( info.do_raw && - fcst_raw_data != nullptr && obs_raw_data != nullptr && + !fcst_raw_data.empty() && !obs_raw_data.empty() && engine.fcst_raw != nullptr && engine.obs_raw != nullptr ) { fcst_raw_data[n] = engine.fcst_raw->data (x, y); @@ -1963,35 +1963,35 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) } if(engine.fcst_split->is_nonzero(x, y) ) { - if ( info.do_object_raw && fcst_obj_raw_data != nullptr && engine.fcst_raw != nullptr ) { + if ( info.do_object_raw && !fcst_obj_raw_data.empty() && engine.fcst_raw != nullptr ) { fcst_obj_raw_data[n] = engine.fcst_raw->data(x, y); } - if ( info.do_object_id && fcst_obj_data != nullptr && engine.fcst_split != nullptr ) { + if ( info.do_object_id && !fcst_obj_data.empty() && engine.fcst_split != nullptr ) { fcst_obj_data[n] = nint(engine.fcst_split->data(x, y)); } } else { - if ( info.do_object_raw && fcst_obj_raw_data != nullptr ) { + if ( info.do_object_raw && !fcst_obj_raw_data.empty() ) { fcst_obj_raw_data[n] = bad_data_float; } - if ( info.do_object_id && fcst_obj_data != nullptr ) { + if ( info.do_object_id && !fcst_obj_data.empty() ) { fcst_obj_data[n] = bad_data_int; } } if(engine.obs_split->is_nonzero(x, y) ) { - if ( info.do_object_raw && obs_obj_raw_data != nullptr ) { + if ( info.do_object_raw && !obs_obj_raw_data.empty() ) { obs_obj_raw_data[n] = engine.obs_raw->data(x, y); } - if ( info.do_object_id && obs_obj_data != nullptr ) { + if ( info.do_object_id && !obs_obj_data.empty() ) { obs_obj_data[n] = nint(engine.obs_split->data(x, y)); } } else { - if ( info.do_object_raw && obs_obj_raw_data != nullptr) { + if ( info.do_object_raw && !obs_obj_raw_data.empty()) { obs_obj_raw_data[n] = bad_data_float; } - if ( info.do_object_id && obs_obj_data != nullptr ) { + if ( info.do_object_id && !obs_obj_data.empty() ) { obs_obj_data[n] = bad_data_int; } } @@ -2000,7 +2000,7 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) // Get cluster object ID's for each grid box // - if ( info.do_cluster_id && fcst_clus_data != nullptr && obs_clus_data != nullptr) { + if ( info.do_cluster_id && !fcst_clus_data.empty() && !obs_clus_data.empty()) { // Write the index of the cluster object if ( engine.fcst_clus_split->data(x, y) > 0 ) { @@ -2040,8 +2040,8 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) if ( info.do_raw ) { - if( !put_nc_data_with_dims(&fcst_raw_var, &fcst_raw_data[0], grid.ny(), grid.nx()) || - !put_nc_data_with_dims(&obs_raw_var, &obs_raw_data[0], grid.ny(), grid.nx()) ) { + if( !put_nc_data_with_dims(&fcst_raw_var, fcst_raw_data.data(), grid.ny(), grid.nx()) || + !put_nc_data_with_dims(&obs_raw_var, obs_raw_data.data(), grid.ny(), grid.nx()) ) { mlog << Error << "\nModeExecutive::write_obj_netcdf() -> " << "error with the fcst_raw_var->put or obs_raw_var->put\n\n"; @@ -2052,8 +2052,8 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) if ( info.do_object_raw ) { - if( !put_nc_data_with_dims(&fcst_obj_raw_var, &fcst_obj_raw_data[0], grid.ny(), grid.nx()) || - !put_nc_data_with_dims(&obs_obj_raw_var, &obs_obj_raw_data[0], grid.ny(), grid.nx()) ) { + if( !put_nc_data_with_dims(&fcst_obj_raw_var, fcst_obj_raw_data.data(), grid.ny(), grid.nx()) || + !put_nc_data_with_dims(&obs_obj_raw_var, obs_obj_raw_data.data(), grid.ny(), grid.nx()) ) { mlog << Error << "\nModeExecutive::write_obj_netcdf() -> " << "error with the fcst_obj_raw_var->put or obs_obj_raw_var->put\n\n"; @@ -2068,8 +2068,8 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) if ( info.do_object_id ) { - if( !put_nc_data_with_dims(&fcst_obj_var, &fcst_obj_data[0], grid.ny(), grid.nx()) || - !put_nc_data_with_dims(&obs_obj_var, &obs_obj_data[0], grid.ny(), grid.nx()) ) { + if( !put_nc_data_with_dims(&fcst_obj_var, fcst_obj_data.data(), grid.ny(), grid.nx()) || + !put_nc_data_with_dims(&obs_obj_var, obs_obj_data.data(), grid.ny(), grid.nx()) ) { mlog << Error << "\nModeExecutive::write_obj_netcdf() -> " << "error with the fcst_obj_var->put or obs_obj_var->put\n\n"; @@ -2084,8 +2084,8 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) if ( info.do_cluster_id ) { - if( !put_nc_data_with_dims(&fcst_clus_var, &fcst_clus_data[0], grid.ny(), grid.nx()) || - !put_nc_data_with_dims(&obs_clus_var, &obs_clus_data[0], grid.ny(), grid.nx()) ) { + if( !put_nc_data_with_dims(&fcst_clus_var, fcst_clus_data.data(), grid.ny(), grid.nx()) || + !put_nc_data_with_dims(&obs_clus_var, obs_clus_data.data(), grid.ny(), grid.nx()) ) { mlog << Error << "\nModeExecutive::write_obj_netcdf() -> " << "error with the fcst_clus_var->put or obs_clus_var->put\n\n"; @@ -2094,20 +2094,6 @@ void ModeExecutive::write_obj_netcdf(const ModeNcOutInfo & info) } - // - // Delete allocated memory - // - - if (fcst_raw_data) { delete [] fcst_raw_data; fcst_raw_data = (float *) nullptr; } - if (fcst_obj_raw_data) { delete [] fcst_obj_raw_data; fcst_obj_raw_data = (float *) nullptr; } - if (fcst_obj_data) { delete [] fcst_obj_data; fcst_obj_data = (int *) nullptr; } - if (fcst_clus_data) { delete [] fcst_clus_data; fcst_clus_data = (int *) nullptr; } - - if (obs_raw_data) { delete [] obs_raw_data; obs_raw_data = (float *) nullptr; } - if (obs_obj_raw_data) { delete [] obs_obj_raw_data; obs_obj_raw_data = (float *) nullptr; } - if (obs_obj_data) { delete [] obs_obj_data; obs_obj_data = (int *) nullptr; } - if (obs_clus_data) { delete [] obs_clus_data; obs_clus_data = (int *) nullptr; } - // // Write out the values of the vertices of the polylines. // @@ -2185,13 +2171,6 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) Polyline **poly = (Polyline **) nullptr; - int *poly_start = (int *) nullptr; - int *poly_npts = (int *) nullptr; - float *poly_lat = (float *) nullptr; - float *poly_lon = (float *) nullptr; - int *poly_x = (int *) nullptr; - int *poly_y = (int *) nullptr; - // Dimensions and variables for each object NcDim obj_dim ; NcVar obj_poly_start_var ; @@ -2368,12 +2347,12 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) // // Allocate memory for the polyline points // - poly_start = new int [n_poly]; - poly_npts = new int [n_poly]; - poly_lat = new float [n_pts]; - poly_lon = new float [n_pts]; - poly_x = new int [n_pts]; - poly_y = new int [n_pts]; + vector poly_start(n_poly); + vector poly_npts (n_poly); + vector poly_lat (n_pts); + vector poly_lon (n_pts); + vector poly_x (n_pts); + vector poly_y (n_pts); // // Store the points for each polyline @@ -2404,8 +2383,8 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) // // Write the polyline information // - if( !put_nc_data_with_dims(&obj_poly_start_var, &poly_start[0], n_poly) || - !put_nc_data_with_dims(&obj_poly_npts_var, &poly_npts[0], n_poly) ) { + if( !put_nc_data_with_dims(&obj_poly_start_var, poly_start.data(), n_poly) || + !put_nc_data_with_dims(&obj_poly_npts_var, poly_npts.data(), n_poly) ) { mlog << Error << "\nModeExecutive::write_poly_netcdf() -> " << "error with " << start_var_name << "->put or " @@ -2416,8 +2395,8 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) // // Write the forecast boundary lat/lon points // - if( !put_nc_data_with_dims(&poly_lat_var, &poly_lat[0], n_pts) || - !put_nc_data_with_dims(&poly_lon_var, &poly_lon[0], n_pts) ) { + if( !put_nc_data_with_dims(&poly_lat_var, poly_lat.data(), n_pts) || + !put_nc_data_with_dims(&poly_lon_var, poly_lon.data(), n_pts) ) { mlog << Error << "\nModeExecutive::write_poly_netcdf() -> " << "error with " << lat_var_name << "->put or " @@ -2428,8 +2407,8 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) // // Write the forecast boundary (x,y) points // - if( !put_nc_data_with_dims(&poly_x_var, &poly_x[0], n_pts) || - !put_nc_data_with_dims(&poly_y_var, &poly_y[0], n_pts) ) { + if( !put_nc_data_with_dims(&poly_x_var, poly_x.data(), n_pts) || + !put_nc_data_with_dims(&poly_y_var, poly_y.data(), n_pts) ) { mlog << Error << "\nModeExecutive::write_poly_netcdf() -> " << "error with " << x_var_name << "->put or" @@ -2437,17 +2416,6 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) exit(1); } - // - // Delete allocated memory - // - if(poly) { delete [] poly; poly = (Polyline **) nullptr; } - if(poly_start) { delete [] poly_start; poly_start = (int *) nullptr; } - if(poly_npts) { delete [] poly_npts; poly_npts = (int *) nullptr; } - if(poly_lat) { delete [] poly_lat; poly_lat = (float *) nullptr; } - if(poly_lon) { delete [] poly_lon; poly_lon = (float *) nullptr; } - if(poly_x) { delete [] poly_x; poly_x = (int *) nullptr; } - if(poly_y) { delete [] poly_y; poly_y = (int *) nullptr; } - return; } diff --git a/src/tools/other/lidar2nc/lidar2nc.cc b/src/tools/other/lidar2nc/lidar2nc.cc index ef30b1aa29..4dc6134397 100644 --- a/src/tools/other/lidar2nc/lidar2nc.cc +++ b/src/tools/other/lidar2nc/lidar2nc.cc @@ -370,7 +370,7 @@ else s << " on host " << junk; // allocate the buffer // -int * const ibuf = new int [n_data]; +vector ibuf(n_data, 0); mlog << Debug(2) << "Processing Lidar points\t= " << n_data << "\n"; @@ -379,17 +379,17 @@ mlog << Debug(2) << "Processing Lidar points\t= " << n_data << "\n"; // populate the hdr_typ variable // -memset(ibuf, 0, n_data*sizeof(int)); +//memset(ibuf, 0, n_data*sizeof(int)); -obs_vars->hdr_typ_var.putVar(ibuf); +obs_vars->hdr_typ_var.putVar(ibuf.data()); // // populate the hdr_sid variable // -memset(ibuf, 0, n_data*sizeof(int)); +//memset(ibuf, 0, n_data*sizeof(int)); -obs_vars->hdr_sid_var.putVar(ibuf); +obs_vars->hdr_sid_var.putVar(ibuf.data()); nc_point_obs.add_header_strings(hdr_typ_string, na_str); // @@ -401,13 +401,9 @@ nc_point_obs.add_header_strings(hdr_typ_string, na_str); float ff[2]; -float *fhdr_lat_buf = new float[n_data]; -float *fhdr_lon_buf = new float[n_data]; -float *fhdr_elv_buf = new float[n_data]; - -memset(fhdr_lat_buf, 0, n_data * sizeof(float)); -memset(fhdr_lon_buf, 0, n_data * sizeof(float)); -memset(fhdr_elv_buf, 0, n_data * sizeof(float)); +vector fhdr_lat_buf(n_data, 0.0); +vector fhdr_lon_buf(n_data, 0.0); +vector fhdr_elv_buf(n_data, 0.0); for (j=0; jhdr_lat_var.putVar(fhdr_lat_buf); -obs_vars->hdr_lon_var.putVar(fhdr_lon_buf); -obs_vars->hdr_elv_var.putVar(fhdr_elv_buf); +obs_vars->hdr_lat_var.putVar(fhdr_lat_buf.data()); +obs_vars->hdr_lon_var.putVar(fhdr_lon_buf.data()); +obs_vars->hdr_elv_var.putVar(fhdr_elv_buf.data()); -delete [] fhdr_lat_buf; -delete [] fhdr_lon_buf; -delete [] fhdr_elv_buf; - // // populate the hdr_vld variable // @@ -441,7 +433,7 @@ unixtime t; get_hdf_var_info(hdf_sd_id, hdf_time_name, info); -memset(ibuf, 0, n_data*sizeof(int)); +//memset(ibuf, 0, n_data*sizeof(int)); for (j=0; jhdr_vld_var.putVar(ibuf); +obs_vars->hdr_vld_var.putVar(ibuf.data()); -delete[] ibuf; - // // populate the obs_arr variable // @@ -585,7 +575,7 @@ void write_nc_record(const float * f, int qc_value) snprintf(junk, sizeof(junk), "%d", qc_value); nc_point_obs.write_observation(f, junk); } - + return; }