@@ -214,17 +214,34 @@ void ResetMemoryRegions()
214214
215215 if (nextVirtualIndex > MAX_RAM_SIZE)
216216 {
217- s_prevValues = (unsigned char *)realloc (s_prevValues, sizeof (char ) * (nextVirtualIndex + 4 ));
218- memset (s_prevValues, 0 , sizeof (char ) * (nextVirtualIndex + 4 ));
217+ size_t size1 = sizeof (unsigned char ) * (nextVirtualIndex + 4 );
218+ size_t size2 = sizeof (unsigned char ) * (nextVirtualIndex + 4 );
219+ size_t size3 = sizeof (unsigned short ) * (nextVirtualIndex + 4 );
220+ size_t size4 = sizeof (MemoryRegion *) * (nextVirtualIndex + 4 );
219221
220- s_curValues = (unsigned char *)realloc (s_curValues, sizeof (char ) * (nextVirtualIndex + 4 ));
221- memset (s_curValues, 0 , sizeof (char ) * (nextVirtualIndex + 4 ));
222+ void *tmp1 = realloc (s_prevValues, size1);
223+ void *tmp2 = realloc (s_curValues, size2);
224+ void *tmp3 = realloc (s_numChanges, size3);
225+ void *tmp4 = realloc (s_itemIndexToRegionPointer, size4);
222226
223- s_numChanges = (unsigned short *)realloc (s_numChanges, sizeof (short ) * (nextVirtualIndex + 4 ));
224- memset (s_numChanges, 0 , sizeof (short ) * (nextVirtualIndex + 4 ));
225-
226- s_itemIndexToRegionPointer = (MemoryRegion * *)realloc (s_itemIndexToRegionPointer, sizeof (MemoryRegion *) * (nextVirtualIndex + 4 ));
227- memset (s_itemIndexToRegionPointer, 0 , sizeof (MemoryRegion *) * (nextVirtualIndex + 4 ));
227+ if (tmp1 && tmp2 && tmp3 && tmp4)
228+ {
229+ memset (tmp1, 0 , size1);
230+ memset (tmp2, 0 , size2);
231+ memset (tmp3, 0 , size3);
232+ memset (tmp4, 0 , size4);
233+ }
234+ else
235+ {
236+ free (s_prevValues);
237+ free (s_curValues);
238+ free (s_numChanges);
239+ free (s_itemIndexToRegionPointer);
240+ }
241+ s_prevValues = (unsigned char *)tmp1;
242+ s_curValues = (unsigned char *)tmp2;
243+ s_numChanges = (unsigned short *)tmp3;
244+ s_itemIndexToRegionPointer = (MemoryRegion **)tmp4;
228245
229246 MAX_RAM_SIZE = nextVirtualIndex;
230247 }
0 commit comments