File tree Expand file tree Collapse file tree 1 file changed +28
-2
lines changed Expand file tree Collapse file tree 1 file changed +28
-2
lines changed Original file line number Diff line number Diff line change @@ -9,10 +9,15 @@ using namespace std;
9
9
#endif
10
10
11
11
// -----------------
12
+ #include < typeinfo>
13
+
14
+ enum Type { type_boolean, type_character, type_number, type_reference };
15
+
12
16
typedef struct Memory {
13
17
void *mem;
14
18
int64_t size;
15
19
bool isArray;
20
+ int type;
16
21
struct Memory *next;
17
22
} Memory;
18
23
@@ -28,8 +33,19 @@ void FreeAllocations(){
28
33
29
34
while (cur != NULL ){
30
35
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
+ }
33
49
}else {
34
50
free (cur->mem );
35
51
}
@@ -87,6 +103,16 @@ std::vector<T> *Allocate(size_t length){
87
103
memory->mem = (void *)addr;
88
104
memory->isArray = true ;
89
105
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
+
90
116
return addr;
91
117
}
92
118
You can’t perform that action at this time.
0 commit comments