提交 a46f3fce 编写于 作者: D dzhwinter

"fix double release tensor buffer error."

上级 e148bc15
...@@ -31,3 +31,4 @@ add_simple_unittest(test_FPException) ...@@ -31,3 +31,4 @@ add_simple_unittest(test_FPException)
add_simple_unittest(test_GpuProfiler) add_simple_unittest(test_GpuProfiler)
add_simple_unittest(test_BaseMatrix) add_simple_unittest(test_BaseMatrix)
add_simple_unittest(test_Matrix) add_simple_unittest(test_Matrix)
add_simple_unittest(test_Matrix2)
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <string.h> #include <string.h>
#include <memory> #include <memory>
#include "paddle/math/MemoryHandle.h"
#include "paddle/utils/Common.h" #include "paddle/utils/Common.h"
#include "paddle/utils/Logging.h" #include "paddle/utils/Logging.h"
...@@ -14,15 +15,19 @@ namespace optimizer { ...@@ -14,15 +15,19 @@ namespace optimizer {
template <class T> template <class T>
class TensorT { class TensorT {
public: public:
TensorT(size_t size) : height_(1), width_(size) { data_ = new T[size]; } TensorT(size_t size)
: TensorT(std::make_shared<CpuMemoryHandle>(size * sizeof(float)), size) {
}
TensorT(CpuMemHandlePtr handle, size_t size)
: height_(1),
width_(size),
data_(reinterpret_cast<T*>(handle->getBuf())) {}
TensorT(T* data, size_t size) : height_(1), width_(size), data_(data) {} TensorT(T* data, size_t size) : height_(1), width_(size), data_(data) {}
TensorT(T* data, size_t h, size_t w) : height_(h), width_(w), data_(data) {} TensorT(T* data, size_t h, size_t w) : height_(h), width_(w), data_(data) {}
~TensorT() { virtual ~TensorT() {}
if (data_) delete data_;
}
T* get_buffer() { return this->data_; } T* get_buffer() { return this->data_; }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册