forked from vieter-v/libvieter
fix: Took a very long time finding a very annyoing bug because realloc is the devil.
parent
62d1081d38
commit
31fc4e2989
|
@ -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);
|
||||||
|
|
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue