fix: Took a very long time finding a very annyoing bug because realloc is the devil.

GreekStapler 2023-01-25 17:24:03 +01:00
parent 6d731d788c
commit 2d6ac2ac19
2 changed files with 8 additions and 8 deletions

View File

@ -5,6 +5,11 @@
#include <string.h> #include <string.h>
typedef struct dyn_array DynArray; typedef struct dyn_array DynArray;
struct dyn_array {
char **array;
size_t capacity;
size_t size;
};
DynArray *dynarray_init(size_t initial_capacity); DynArray *dynarray_init(size_t initial_capacity);
void dynarray_add(DynArray *da, const char * s); void dynarray_add(DynArray *da, const char * s);

View File

@ -1,11 +1,5 @@
#include "dynarray.h" #include "dynarray.h"
struct dyn_array {
char **array;
size_t size;
size_t capacity;
};
DynArray *dynarray_init(size_t initial_capacity) { DynArray *dynarray_init(size_t initial_capacity) {
DynArray *da = malloc(sizeof(DynArray)); DynArray *da = malloc(sizeof(DynArray));
da->size = 0; da->size = 0;
@ -21,10 +15,11 @@ void dynarray_add(DynArray *da, const char *s) {
} }
// Double array size if it's full // Double array size if it's full
else if (da->size == da->capacity) { else if (da->size == da->capacity) {
da->array = realloc(da->array, da->capacity * 2); // if the realloc fails, access to memory in da->array is lost
da->array = realloc(da->array, sizeof(char*) * da->capacity * 2);
da->capacity *= 2; da->capacity *= 2;
} }
da->array[da->size] = strdup(s); da->array[da->size] = strdup(s);
da->size++; da->size++;
} }