Commit 90de18b
committed
Fix many allocation/deallocation mismatches.
The LiveCode engine uses three different allocators with distinct
semantics.
- `malloc()`/`free()`: these are C library procedures, usually
accessed via the `MCMemory*` libfoundation functions; they allocate
memory on the heap and do no C++ construction or destruction of
their contents.
- `new`/`delete`: these C++ operators allocate/deallocate a single
instance on the heap, and calls its constructor/destructor.
- `new[]`/`delete[]`: these C++ operators allocate/deallocate an sized
array of instances on the heap, and call the constructor/destructor
for each of them.
Mismatch (e.g. allocating with `new[]` and freeing with `free()` is a
resource management error, since it can result in something having a
destructor called when it shouldn't (or vice versa). Both Coverity
Scan and the newest version of valgrind detect mismatched use.
This patch is a mostly mechanical replacement of release statements to
match the corresponding allocators, with addition of annotation of
what the expected allocator is. (I added the annotation to help me
detect when multiple codepaths were allocating in conflicting
ways). As part of this, I changed a couple of inconsistent allocation
paths.
A particular error that occurs frequently is using an
`MCAutoPointer<T>` to manage a `T*` that was created using `malloc()`;
in particular, the usual error is to try and put the result of a
libfoundation function that allocates a buffer into an
`MCAutoPointer<T>`. This won't work, because libfoundation always
allocates memory with `malloc()`, and `MCAutoPointer` always destroys
its contents with `delete`. Several codepaths are corrected to use an
appropriate `MCAutoCustomPointer` instead.1 parent d54575f commit 90de18b
27 files changed
Lines changed: 69 additions & 60 deletions
File tree
- engine/src
- revxml/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
154 | 154 | | |
155 | 155 | | |
156 | 156 | | |
157 | | - | |
| 157 | + | |
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
81 | | - | |
| 81 | + | |
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
| 70 | + | |
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
181 | | - | |
182 | | - | |
| 181 | + | |
| 182 | + | |
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1395 | 1395 | | |
1396 | 1396 | | |
1397 | 1397 | | |
1398 | | - | |
| 1398 | + | |
1399 | 1399 | | |
1400 | 1400 | | |
1401 | 1401 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
102 | | - | |
| 101 | + | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
961 | 961 | | |
962 | 962 | | |
963 | 963 | | |
964 | | - | |
| 964 | + | |
965 | 965 | | |
966 | 966 | | |
967 | 967 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1485 | 1485 | | |
1486 | 1486 | | |
1487 | 1487 | | |
1488 | | - | |
| 1488 | + | |
1489 | 1489 | | |
1490 | 1490 | | |
1491 | 1491 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
564 | 564 | | |
565 | 565 | | |
566 | 566 | | |
567 | | - | |
| 567 | + | |
568 | 568 | | |
569 | 569 | | |
570 | 570 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
353 | 353 | | |
354 | 354 | | |
355 | 355 | | |
356 | | - | |
| 356 | + | |
357 | 357 | | |
358 | | - | |
| 358 | + | |
359 | 359 | | |
360 | 360 | | |
361 | 361 | | |
| |||
0 commit comments