From 45bcc1b6845441e8af98e6e93d7832f101d5e796 Mon Sep 17 00:00:00 2001 From: canming Date: Sun, 5 Feb 2012 03:24:51 +0000 Subject: [PATCH] Set the _ptr value to zero after the releaseXXX function call git-svn-id: https://emgucv.svn.sourceforge.net/svnroot/emgucv/trunk@1528 d7f09016-e345-0410-b530-edf29a71df78 --- Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp | 1 + Emgu.CV.Extern/ml.cpp | 33 +++++++++++------ Emgu.CV.Extern/ml_c.h | 41 +++++++++++++-------- Emgu.CV.ML/ANN_MLP.cs | 2 +- Emgu.CV.ML/Boost.cs | 2 +- Emgu.CV.ML/DTree.cs | 2 +- Emgu.CV.ML/EM.cs | 2 +- Emgu.CV.ML/ERTrees.cs | 2 +- Emgu.CV.ML/KNearest.cs | 2 +- Emgu.CV.ML/NormalBayesClassifier.cs | 2 +- Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs | 2 +- Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs | 2 +- Emgu.CV.ML/RTrees.cs | 2 +- Emgu.CV.ML/SVM.cs | 2 +- 14 files changed, 59 insertions(+), 38 deletions(-) diff --git a/Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp b/Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp index c904a2561..b68a77117 100644 --- a/Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp +++ b/Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp @@ -14,6 +14,7 @@ cv::gpu::CascadeClassifier_GPU* gpuCascadeClassifierCreate(const char* filename) void gpuCascadeClassifierRelease(cv::gpu::CascadeClassifier_GPU** classifier) { delete *classifier; + *classifier = 0; } int gpuCascadeClassifierDetectMultiScale(cv::gpu::CascadeClassifier_GPU* classifier, const cv::gpu::GpuMat* image, cv::gpu::GpuMat* objectsBuf, double scaleFactor, int minNeighbors, CvSize minSize, CvSeq* results) diff --git a/Emgu.CV.Extern/ml.cpp b/Emgu.CV.Extern/ml.cpp index 0c81932f9..826da2553 100644 --- a/Emgu.CV.Extern/ml.cpp +++ b/Emgu.CV.Extern/ml.cpp @@ -15,7 +15,7 @@ void StatModelClear(CvStatModel* model) { model->clear(); } CvNormalBayesClassifier* CvNormalBayesClassifierDefaultCreate() { return new CvNormalBayesClassifier; } CvNormalBayesClassifier* CvNormalBayesClassifierCreate( CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx ) { return new CvNormalBayesClassifier(_train_data, _responses, _var_idx, _sample_idx); } -void CvNormalBayesClassifierRelease(CvNormalBayesClassifier* classifier) { delete classifier; } +void CvNormalBayesClassifierRelease(CvNormalBayesClassifier** classifier) { delete *classifier; *classifier = 0; } bool CvNormalBayesClassifierTrain(CvNormalBayesClassifier* classifier, CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, bool update ) { return classifier->train(_train_data, _responses, _var_idx, _sample_idx, update); } @@ -24,7 +24,7 @@ float CvNormalBayesClassifierPredict(CvNormalBayesClassifier* classifier, CvMat* //KNearest CvKNearest* CvKNearestDefaultCreate() { return new CvKNearest; } -void CvKNearestRelease(CvKNearest* classifier) { delete classifier; } +void CvKNearestRelease(CvKNearest** classifier) { delete *classifier; *classifier = 0; } bool CvKNearestTrain(CvKNearest* classifier, CvMat* _train_data, CvMat* _responses, CvMat* _sample_idx, bool is_regression, int _max_k, bool _update_base) @@ -38,7 +38,7 @@ float CvKNearestFindNearest(CvKNearest* classifier, CvMat* _samples, int k, CvMa //EM CvEM* CvEMDefaultCreate() { return new CvEM; } -void CvEMRelease(CvEM* model) { delete model; } +void CvEMRelease(CvEM** model) { delete *model; *model = 0;} bool CvEMTrain(CvEM* model, CvMat* samples, CvMat* sample_idx, CvEMParams params, CvMat* labels ) { return model->train(samples, sample_idx, params, labels); } @@ -73,7 +73,7 @@ grid->max_val = defaultGrid.max_val; grid->min_val = defaultGrid.min_val; grid->step = defaultGrid.step; } -void CvSVMRelease(CvSVM* model) { delete model; } +void CvSVMRelease(CvSVM** model) { delete *model; *model = 0; } float CvSVMPredict(CvSVM* model, CvMat* _sample ) { return model->predict(_sample); } float* CvSVMGetSupportVector(CvSVM* model, int i) @@ -89,7 +89,7 @@ CvANN_MLP* CvANN_MLPCreate(CvMat* _layer_sizes, int _activ_func, double _f_param1, double _f_param2 ) { return new CvANN_MLP(_layer_sizes, _activ_func, _f_param1, _f_param2); } -void CvANN_MLPRelease(CvANN_MLP* model) { delete model; } +void CvANN_MLPRelease(CvANN_MLP** model) { delete *model; *model = 0; } int CvANN_MLPTrain(CvANN_MLP* model, CvMat* _inputs, CvMat* _outputs, CvMat* _sample_weights, CvMat* _sample_idx, CvANN_MLP_TrainParams* _params, @@ -102,10 +102,10 @@ int CvANN_MLPGetLayerCount(CvANN_MLP* model) { return model->get_layer_count(); //Decision Tree CvDTreeParams* CvDTreeParamsCreate() { return new CvDTreeParams; } -void CvDTreeParamsRelease(CvDTreeParams* params) { delete params; } +void CvDTreeParamsRelease(CvDTreeParams** params) { delete *params; *params = 0;} CvDTree* CvDTreeCreate() { return new CvDTree; } -void CvDTreeRelease(CvDTree* model) { delete model; } +void CvDTreeRelease(CvDTree** model) { delete *model; *model = 0;} bool CvDTreeTrain(CvDTree* model, CvMat* _train_data, int _tflag, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, CvMat* _var_type, @@ -117,10 +117,10 @@ CvDTreeNode* CvDTreePredict(CvDTree* model, CvMat* _sample, CvMat* _missing_data //Random Tree CvRTParams* CvRTParamsCreate() { return new CvRTParams(); } -void CvRTParamsRelease(CvRTParams* params) { delete params; } +void CvRTParamsRelease(CvRTParams** params) { delete *params; *params = 0; } CvRTrees* CvRTreesCreate() { return new CvRTrees(); } -void CvRTreesRelease(CvRTrees* model) { delete model; } +void CvRTreesRelease(CvRTrees** model) { delete *model; *model = 0; } bool CvRTreesTrain( CvRTrees* model, CvMat* _train_data, int _tflag, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, CvMat* _var_type, @@ -142,11 +142,11 @@ CvMat* CvRTreesGetVarImportance(CvRTrees* model) { return (CvMat*) model->get_va //Extreme Random Tree CvERTrees* CvERTreesCreate() { return new CvERTrees(); } -void CvERTreesRelease(CvERTrees* model) { delete model; } +void CvERTreesRelease(CvERTrees** model) { delete *model; *model = 0; } //CvBoost CvBoostParams* CvBoostParamsCreate() { return new CvBoostParams(); } -void CvBoostParamsRelease(CvBoostParams* params) { delete params; } +void CvBoostParamsRelease(CvBoostParams** params) { delete *params; *params = 0; } CvBoost* CvBoostCreate() { return new CvBoost(); } void CvBoostRelease(CvBoost* model) { delete model; } @@ -164,3 +164,14 @@ float CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing, bool raw_mode) { return model->predict(_sample, _missing, weak_responses, slice, raw_mode); } +/* +//CvGBTrees +CVAPI(CvGBTrees*) CvGBTreesCreate(); +CVAPI(void) CvGBTreesRelease(CvGBTrees** model); +CVAPI(bool) CvGBTreeTrain(CvGBTrees* model, const CvMat* trainData, int tflag, + const CvMat* responses, const CvMat* varIdx, + const CvMat* sampleIdx, const CvMat* varType, + const CvMat* missingDataMask, + CvGBTreesParams params, + bool update); +*/ \ No newline at end of file diff --git a/Emgu.CV.Extern/ml_c.h b/Emgu.CV.Extern/ml_c.h index 1e07613d3..9c3f1407c 100644 --- a/Emgu.CV.Extern/ml_c.h +++ b/Emgu.CV.Extern/ml_c.h @@ -12,20 +12,20 @@ #include "opencv2/ml/ml.hpp" //StatModel -CVAPI(void) StatModelSave(CvStatModel* model, char* filename, char* name = 0); -CVAPI(void) StatModelLoad(CvStatModel* model, char* filename, char* name = 0); +CVAPI(void) StatModelSave(CvStatModel* model, char* filename, char* name); +CVAPI(void) StatModelLoad(CvStatModel* model, char* filename, char* name); CVAPI(void) StatModelClear(CvStatModel* model); //CvNormalBayesClassifier CVAPI(CvNormalBayesClassifier*) CvNormalBayesClassifierDefaultCreate(); CVAPI(CvNormalBayesClassifier*) CvNormalBayesClassifierCreate( CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx ); -CVAPI(void) CvNormalBayesClassifierRelease(CvNormalBayesClassifier* classifier); +CVAPI(void) CvNormalBayesClassifierRelease(CvNormalBayesClassifier** classifier); CVAPI(bool) CvNormalBayesClassifierTrain(CvNormalBayesClassifier* classifier, CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, bool update ); CVAPI(float) CvNormalBayesClassifierPredict(CvNormalBayesClassifier* classifier, CvMat* _samples, CvMat* results ); //KNearest CVAPI(CvKNearest*) CvKNearestDefaultCreate(); -CVAPI(void) CvKNearestRelease(CvKNearest* classifier); +CVAPI(void) CvKNearestRelease(CvKNearest** classifier); CVAPI(bool) CvKNearestTrain(CvKNearest* classifier, CvMat* _train_data, CvMat* _responses, CvMat* _sample_idx, bool is_regression, int _max_k, bool _update_base); @@ -36,7 +36,7 @@ CVAPI(float) CvKNearestFindNearest(CvKNearest* classifier, CvMat* _samples, int //EM CVAPI(CvEM*) CvEMDefaultCreate(); -CVAPI(void) CvEMRelease(CvEM* model); +CVAPI(void) CvEMRelease(CvEM** model); CVAPI(bool) CvEMTrain(CvEM* model, CvMat* samples, CvMat* sample_idx, CvEMParams params, CvMat* labels ); CVAPI(float) CvEMPredict(CvEM* model, CvMat* sample, CvMat* probs ); @@ -61,7 +61,7 @@ CVAPI(bool) CvSVMTrainAuto(CvSVM* model, CvMat* _train_data, CvMat* _responses, CvParamGrid coef_grid, CvParamGrid degree_grid); CVAPI(void) CvSVMGetDefaultGrid(int gridType, CvParamGrid* grid); -CVAPI(void) CvSVMRelease(CvSVM* model); +CVAPI(void) CvSVMRelease(CvSVM** model); CVAPI(float) CvSVMPredict(CvSVM* model, CvMat* _sample ); CVAPI(float*) CvSVMGetSupportVector(CvSVM* model, int i); CVAPI(int) CvSVMGetSupportVectorCount(CvSVM* model); @@ -72,7 +72,7 @@ CVAPI(void) CvSVMGetParameters(CvSVM* model, CvSVMParams* param); CVAPI(CvANN_MLP*) CvANN_MLPCreate(CvMat* _layer_sizes, int _activ_func, double _f_param1, double _f_param2 ); -CVAPI(void) CvANN_MLPRelease(CvANN_MLP* model); +CVAPI(void) CvANN_MLPRelease(CvANN_MLP** model); CVAPI(int) CvANN_MLPTrain(CvANN_MLP* model, CvMat* _inputs, CvMat* _outputs, CvMat* _sample_weights, CvMat* _sample_idx, CvANN_MLP_TrainParams* _params, @@ -83,9 +83,9 @@ CVAPI(int) CvANN_MLPGetLayerCount(CvANN_MLP* model); //Decision Tree CVAPI(CvDTreeParams*) CvDTreeParamsCreate(); -CVAPI(void) CvDTreeParamsRelease(CvDTreeParams* params); +CVAPI(void) CvDTreeParamsRelease(CvDTreeParams** params); CVAPI(CvDTree*) CvDTreeCreate(); -CVAPI(void) CvDTreeRelease(CvDTree* model); +CVAPI(void) CvDTreeRelease(CvDTree** model); CVAPI(bool) CvDTreeTrain(CvDTree* model, CvMat* _train_data, int _tflag, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, CvMat* _var_type, @@ -95,10 +95,10 @@ CVAPI(CvDTreeNode*) CvDTreePredict(CvDTree* model, CvMat* _sample, CvMat* _missi //Random Tree CVAPI(CvRTParams*) CvRTParamsCreate(); -CVAPI(void) CvRTParamsRelease(CvRTParams* params); +CVAPI(void) CvRTParamsRelease(CvRTParams** params); CVAPI(CvRTrees*) CvRTreesCreate(); -CVAPI(void) CvRTreesRelease(CvRTrees* model); +CVAPI(void) CvRTreesRelease(CvRTrees** model); CVAPI(bool) CvRTreesTrain( CvRTrees* model, CvMat* _train_data, int _tflag, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx, CvMat* _var_type, @@ -118,11 +118,11 @@ CVAPI(CvMat*) CvRTreesGetVarImportance(CvRTrees* model); //Extreme Random Tree CVAPI(CvERTrees*) CvERTreesCreate(); -CVAPI(void) CvERTreesRelease(CvERTrees* model); +CVAPI(void) CvERTreesRelease(CvERTrees** model); //CvBoost CVAPI(CvBoostParams*) CvBoostParamsCreate(); -CVAPI(void) CvBoostParamsRelease(CvBoostParams* params); +CVAPI(void) CvBoostParamsRelease(CvBoostParams** params); CVAPI(CvBoost*) CvBoostCreate(); CVAPI(void) CvBoostRelease(CvBoost* model); @@ -133,8 +133,17 @@ CVAPI(bool) CvBoostTrain(CvBoost* model, CvMat* _train_data, int _tflag, CvBoostParams params, bool update ); -CVAPI(float) CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing=0, - CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ, - bool raw_mode=false ); +CVAPI(float) CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing, + CvMat* weak_responses, CvSlice slice, + bool raw_mode); +//CvGBTrees +CVAPI(CvGBTrees*) CvGBTreesCreate(); +CVAPI(void) CvGBTreesRelease(CvGBTrees** model); +CVAPI(bool) CvGBTreeTrain(CvGBTrees* model, const CvMat* trainData, int tflag, + const CvMat* responses, const CvMat* varIdx, + const CvMat* sampleIdx, const CvMat* varType, + const CvMat* missingDataMask, + CvGBTreesParams params, + bool update); #endif \ No newline at end of file diff --git a/Emgu.CV.ML/ANN_MLP.cs b/Emgu.CV.ML/ANN_MLP.cs index 72de79b36..bc6c17bf3 100644 --- a/Emgu.CV.ML/ANN_MLP.cs +++ b/Emgu.CV.ML/ANN_MLP.cs @@ -29,7 +29,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvANN_MLPRelease(_ptr); + MlInvoke.CvANN_MLPRelease(ref _ptr); } /// diff --git a/Emgu.CV.ML/Boost.cs b/Emgu.CV.ML/Boost.cs index 34a985ea1..e37abd45e 100644 --- a/Emgu.CV.ML/Boost.cs +++ b/Emgu.CV.ML/Boost.cs @@ -91,7 +91,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvBoostRelease(_ptr); + MlInvoke.CvBoostRelease(ref _ptr); } } } diff --git a/Emgu.CV.ML/DTree.cs b/Emgu.CV.ML/DTree.cs index 1a46c7f3d..7878c5e65 100644 --- a/Emgu.CV.ML/DTree.cs +++ b/Emgu.CV.ML/DTree.cs @@ -77,7 +77,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvDTreeRelease(_ptr); + MlInvoke.CvDTreeRelease(ref _ptr); } } } diff --git a/Emgu.CV.ML/EM.cs b/Emgu.CV.ML/EM.cs index b518788da..8d53d30ac 100644 --- a/Emgu.CV.ML/EM.cs +++ b/Emgu.CV.ML/EM.cs @@ -168,7 +168,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvEMRelease(_ptr); + MlInvoke.CvEMRelease(ref _ptr); } } } diff --git a/Emgu.CV.ML/ERTrees.cs b/Emgu.CV.ML/ERTrees.cs index d576e1614..e9af22d71 100644 --- a/Emgu.CV.ML/ERTrees.cs +++ b/Emgu.CV.ML/ERTrees.cs @@ -24,7 +24,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvERTreesRelease(_ptr); + MlInvoke.CvERTreesRelease(ref _ptr); } } } diff --git a/Emgu.CV.ML/KNearest.cs b/Emgu.CV.ML/KNearest.cs index edfc093ed..e3f11efe3 100644 --- a/Emgu.CV.ML/KNearest.cs +++ b/Emgu.CV.ML/KNearest.cs @@ -39,7 +39,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvKNearestRelease(_ptr); + MlInvoke.CvKNearestRelease(ref _ptr); } /// diff --git a/Emgu.CV.ML/NormalBayesClassifier.cs b/Emgu.CV.ML/NormalBayesClassifier.cs index c74632e78..af7ac08d2 100644 --- a/Emgu.CV.ML/NormalBayesClassifier.cs +++ b/Emgu.CV.ML/NormalBayesClassifier.cs @@ -41,7 +41,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvNormalBayesClassifierRelease(_ptr); + MlInvoke.CvNormalBayesClassifierRelease(ref _ptr); } /// diff --git a/Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs b/Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs index a324a59d3..d3f37f585 100644 --- a/Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs +++ b/Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs @@ -21,7 +21,7 @@ namespace Emgu.CV.ML.Structure { IntPtr ptr = MlInvoke.CvDTreeParamsCreate(); MCvDTreeParams p = (MCvDTreeParams) Marshal.PtrToStructure(ptr, typeof(MCvDTreeParams)); - MlInvoke.CvDTreeParamsRelease(ptr); + MlInvoke.CvDTreeParamsRelease(ref ptr); return p; } diff --git a/Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs b/Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs index 69c46e435..88d63a4d2 100644 --- a/Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs +++ b/Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs @@ -22,7 +22,7 @@ namespace Emgu.CV.ML.Structure { IntPtr ptr = MlInvoke.CvRTParamsCreate(); MCvRTParams p = (MCvRTParams)Marshal.PtrToStructure(ptr, typeof(MCvRTParams)); - MlInvoke.CvRTParamsRelease(ptr); + MlInvoke.CvRTParamsRelease(ref ptr); return p; } diff --git a/Emgu.CV.ML/RTrees.cs b/Emgu.CV.ML/RTrees.cs index c27344d49..c1fa38e27 100644 --- a/Emgu.CV.ML/RTrees.cs +++ b/Emgu.CV.ML/RTrees.cs @@ -29,7 +29,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvRTreesRelease(_ptr); + MlInvoke.CvRTreesRelease(ref _ptr); } /// diff --git a/Emgu.CV.ML/SVM.cs b/Emgu.CV.ML/SVM.cs index 2fee99bea..5c996902f 100644 --- a/Emgu.CV.ML/SVM.cs +++ b/Emgu.CV.ML/SVM.cs @@ -26,7 +26,7 @@ namespace Emgu.CV.ML /// protected override void DisposeObject() { - MlInvoke.CvSVMRelease(_ptr); + MlInvoke.CvSVMRelease(ref _ptr); } ///