PVS: V1023 A pointer without owner is added to the container by the 'emplace_back' method. A memory leak will occur in case of an exception.

This commit is contained in:
wmayer
2020-07-17 16:00:02 +02:00
parent e1363e5d0f
commit 1d7299502e
5 changed files with 11 additions and 11 deletions

View File

@@ -1911,7 +1911,7 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args)
#else
int num = (int)Py::Int(t[4]);
#endif
segm.emplace_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol1, tol2, c1, c2));
segm.emplace_back(std::make_shared<MeshCore::MeshCurvatureFreeformSegment>(meshCurv.GetCurvature(), num, tol1, tol2, c1, c2));
}
finder.FindSegments(segm);

View File

@@ -85,21 +85,21 @@ void Segmentation::accept()
std::vector<MeshCore::MeshSurfaceSegmentPtr> segm;
if (ui->groupBoxFree->isChecked()) {
segm.emplace_back(new MeshCore::MeshCurvatureFreeformSegment
segm.emplace_back(std::make_shared<MeshCore::MeshCurvatureFreeformSegment>
(meshCurv.GetCurvature(), ui->numFree->value(),
ui->tol1Free->value(), ui->tol2Free->value(),
ui->crv1Free->value(), ui->crv2Free->value()));
}
if (ui->groupBoxCyl->isChecked()) {
segm.emplace_back(new MeshCore::MeshCurvatureCylindricalSegment
segm.emplace_back(std::make_shared<MeshCore::MeshCurvatureCylindricalSegment>
(meshCurv.GetCurvature(), ui->numCyl->value(), ui->tol1Cyl->value(), ui->tol2Cyl->value(), ui->crvCyl->value()));
}
if (ui->groupBoxSph->isChecked()) {
segm.emplace_back(new MeshCore::MeshCurvatureSphericalSegment
segm.emplace_back(std::make_shared<MeshCore::MeshCurvatureSphericalSegment>
(meshCurv.GetCurvature(), ui->numSph->value(), ui->tolSph->value(), ui->crvSph->value()));
}
if (ui->groupBoxPln->isChecked()) {
segm.emplace_back(new MeshCore::MeshCurvaturePlanarSegment
segm.emplace_back(std::make_shared<MeshCore::MeshCurvaturePlanarSegment>
(meshCurv.GetCurvature(), ui->numPln->value(), ui->tolPln->value()));
}
finder.FindSegments(segm);

View File

@@ -427,7 +427,7 @@ void SegmentationBestFit::accept()
else {
fitter = new MeshCore::CylinderSurfaceFit;
}
segm.emplace_back(new MeshCore::MeshDistanceGenericSurfaceFitSegment
segm.emplace_back(std::make_shared<MeshCore::MeshDistanceGenericSurfaceFitSegment>
(fitter, kernel, ui->numCyl->value(), ui->tolCyl->value()));
}
if (ui->groupBoxSph->isChecked()) {
@@ -441,7 +441,7 @@ void SegmentationBestFit::accept()
else {
fitter = new MeshCore::SphereSurfaceFit;
}
segm.emplace_back(new MeshCore::MeshDistanceGenericSurfaceFitSegment
segm.emplace_back(std::make_shared<MeshCore::MeshDistanceGenericSurfaceFitSegment>
(fitter, kernel, ui->numSph->value(), ui->tolSph->value()));
}
if (ui->groupBoxPln->isChecked()) {
@@ -455,7 +455,7 @@ void SegmentationBestFit::accept()
else {
fitter = new MeshCore::PlaneSurfaceFit;
}
segm.emplace_back(new MeshCore::MeshDistanceGenericSurfaceFitSegment
segm.emplace_back(std::make_shared<MeshCore::MeshDistanceGenericSurfaceFitSegment>
(fitter, kernel, ui->numPln->value(), ui->tolPln->value()));
}
finder.FindSegments(segm);

View File

@@ -99,7 +99,7 @@ void Segmentation::accept()
// First create segments by curavture to get the surface type
std::vector<MeshCore::MeshSurfaceSegmentPtr> segm;
if (ui->groupBoxPln->isChecked()) {
segm.emplace_back(new MeshCore::MeshCurvaturePlanarSegment
segm.emplace_back(std::make_shared<MeshCore::MeshCurvaturePlanarSegment>
(meshCurv.GetCurvature(), ui->numPln->value(), ui->curvTolPln->value()));
}
finder.FindSegments(segm);
@@ -118,7 +118,7 @@ void Segmentation::accept()
Base::Vector3f base = fit.GetBase();
Base::Vector3f axis = fit.GetNormal();
MeshCore::AbstractSurfaceFit* fitter = new MeshCore::PlaneSurfaceFit(base, axis);
segmSurf.emplace_back(new MeshCore::MeshDistanceGenericSurfaceFitSegment
segmSurf.emplace_back(std::make_shared<MeshCore::MeshDistanceGenericSurfaceFitSegment>
(fitter, kernel, ui->numPln->value(), ui->distToPln->value()));
}
}

View File

@@ -145,7 +145,7 @@ static void findGeometry(int minFaces, double tolerance,
MeshCore::MeshSegmentAlgorithm finder(kernel);
std::vector<MeshCore::MeshSurfaceSegmentPtr> segm;
segm.emplace_back(new MeshCore::MeshDistanceGenericSurfaceFitSegment
segm.emplace_back(std::make_shared<MeshCore::MeshDistanceGenericSurfaceFitSegment>
(surfFit, kernel, minFaces, tolerance));
finder.FindSegments(segm);