File tree Expand file tree Collapse file tree 1 file changed +9
-2
lines changed Expand file tree Collapse file tree 1 file changed +9
-2
lines changed Original file line number Diff line number Diff line change 14
14
15
15
#include < inttypes.h>
16
16
#include < stddef.h>
17
+ #include < new>
17
18
18
19
/* *
19
20
* A simple, resizable array list. Note that this only works with POD types
@@ -69,8 +70,12 @@ array_list<T>::append(T value) {
69
70
template <typename T> int32_t
70
71
array_list<T>::push(T value) {
71
72
if (_size == _capacity) {
72
- _capacity = _capacity * 2 ;
73
- _data = (T *) realloc (_data, _capacity * sizeof (T));
73
+ size_t new_capacity = _capacity * 2 ;
74
+ void * buffer = realloc (_data, new_capacity * sizeof (T));
75
+ if (buffer == NULL )
76
+ throw std::bad_alloc ();
77
+ _data = (T *) buffer;
78
+ _capacity = new_capacity;
74
79
}
75
80
_data[_size ++] = value;
76
81
return _size - 1 ;
@@ -115,11 +120,13 @@ array_list<T>::index_of(T value) const {
115
120
116
121
template <typename T> T &
117
122
array_list<T>::operator [](size_t index) {
123
+ assert (index < size ());
118
124
return _data[index];
119
125
}
120
126
121
127
template <typename T> const T &
122
128
array_list<T>::operator [](size_t index) const {
129
+ assert (index < size ());
123
130
return _data[index];
124
131
}
125
132
You can’t perform that action at this time.
0 commit comments