Skip to content

Commit 15f6ca5

Browse files
solved issue #28
1 parent 9aa1bbb commit 15f6ca5

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

Cpp/pbPlots.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ using namespace std;
99
#endif
1010

1111
// -----------------
12+
#include <typeinfo>
13+
14+
enum Type { type_boolean, type_character, type_number, type_reference };
15+
1216
typedef struct Memory{
1317
void *mem;
1418
int64_t size;
1519
bool isArray;
20+
int type;
1621
struct Memory *next;
1722
} Memory;
1823

@@ -28,8 +33,19 @@ void FreeAllocations(){
2833

2934
while(cur != NULL){
3035
if(cur->isArray){
31-
vector<void*> *x = (vector<void*> *)cur->mem;
32-
delete x;
36+
if(cur->type == type_boolean){
37+
vector<bool> *x = (vector<bool> *)cur->mem;
38+
delete x;
39+
}else if(cur->type == type_character){
40+
vector<wchar_t> *x = (vector<wchar_t> *)cur->mem;
41+
delete x;
42+
}else if(cur->type == type_number){
43+
vector<double> *x = (vector<double> *)cur->mem;
44+
delete x;
45+
}else{
46+
vector<void*> *x = (vector<void*> *)cur->mem;
47+
delete x;
48+
}
3349
}else{
3450
free(cur->mem);
3551
}
@@ -87,6 +103,16 @@ std::vector<T> *Allocate(size_t length){
87103
memory->mem = (void*)addr;
88104
memory->isArray = true;
89105

106+
if(typeid(T) == typeid(bool)){
107+
memory->type = type_boolean;
108+
}else if(typeid(T) == typeid(wchar_t)){
109+
memory->type = type_character;
110+
}else if(typeid(T) == typeid(double)){
111+
memory->type = type_number;
112+
}else{
113+
memory->type = type_reference;
114+
}
115+
90116
return addr;
91117
}
92118

0 commit comments

Comments
 (0)