Skip to content

Instantly share code, notes, and snippets.

@m4s0
Created August 28, 2015 22:09
Show Gist options
  • Save m4s0/dec59107c45621f573d5 to your computer and use it in GitHub Desktop.
Save m4s0/dec59107c45621f573d5 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char **data;
size_t used;
size_t size;
} Array;
void initArray(Array *array, size_t initialSize);
void insertElement(Array *array, char *element);
void freeArray(Array *array);
void initArray(Array *array, size_t initialSize) {
array->data = malloc(initialSize * sizeof(char *));
if (array->data == NULL) {
printf("ERROR: Memory allocation failure!\n");
exit(1);
}
array->used = 0;
array->size = initialSize;
}
void insertElement(Array *array, char *element) {
if (array->used == array->size) {
void *pointer;
array->size *= 2;
pointer = realloc(array->data, array->size * sizeof(char *));
if (array->data == NULL) {
freeArray(array);
printf("ERROR: Memory allocation failure!\n");
exit(1);
}
array->data = pointer;
}
/* if the string passed is not NULL, copy it */
if (element != NULL) {
size_t length;
length = strlen(element);
array->data[array->used] = malloc(1 + length);
if (array->data[array->used] != NULL)
strcpy(array->data[array->used++], element);
}
else
array->data[array->used++] = NULL;
}
void freeArray(Array *array) {
size_t i;
/* Free all the copies of the strings */
for (i = 0; i < array->used; ++i)
free(array->data[i]);
free(array->data);
free(array);
}
int main(void) {
Array *array = NULL;
array = malloc(sizeof(Array));
if (array == NULL) {
printf("Memory allocation issues\n");
return -1;
}
initArray(array, 5); /* 5 lines */
insertElement(array, "Test1");
insertElement(array, "Test2");
insertElement(array, "Test3");
insertElement(array, "Test4");
printf("%s\n", array->data[0]);
printf("%s\n", array->data[1]);
printf("%s\n", array->data[2]);
printf("%s\n", array->data[3]);
freeArray(array);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment