diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 0e18ad20e0..bc851704a7 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -60,7 +60,6 @@ void MatAllocator::unmap(UMatData* u) const if(u->urefcount == 0 && u->refcount == 0) { deallocate(u); - u = NULL; } } @@ -461,8 +460,11 @@ void Mat::copySize(const Mat& m) void Mat::deallocate() { if(u) - (u->currAllocator ? u->currAllocator : allocator ? allocator : getDefaultAllocator())->unmap(u); - u = NULL; + { + UMatData* u_ = u; + u = NULL; + (u_->currAllocator ? u_->currAllocator : allocator ? allocator : getDefaultAllocator())->unmap(u_); + } } Mat::Mat(const Mat& m, const Range& _rowRange, const Range& _colRange) diff --git a/modules/core/src/umatrix.cpp b/modules/core/src/umatrix.cpp index 239e461cd9..58f7390321 100644 --- a/modules/core/src/umatrix.cpp +++ b/modules/core/src/umatrix.cpp @@ -411,8 +411,9 @@ UMat::~UMat() void UMat::deallocate() { - u->currAllocator->deallocate(u); + UMatData* u_ = u; u = NULL; + u_->currAllocator->deallocate(u_); }