diff --git a/.gitignore b/.gitignore index 5222c2f..80f665a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -highscores.txt +doble_initial.exe +*.o +*.exe \ No newline at end of file diff --git a/highscores.txt b/highscores.txt index 058b28c..ca5950d 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,9 +1,2 @@ -Max02.12;19860 -max;19374 -Max02.12;11910 -kristin;9935 -Max02.12;7966 -player_name;7961 -max;5989 -Max02.12;4988 +krisp;4986 player1;3999 diff --git a/makefile b/makefile index c816795..a27e9b1 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,6 @@ CC = gcc FLAGS = -g -Wall -lm +ASAN_FLAGS = -fsanitize=address ifeq ($(OS),Windows_NT) include makefile_windows.variables @@ -29,7 +30,7 @@ program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o doble : main.o $(program_obj_files) $(CC) $(FLAGS) $^ -o doble -$(program_obj_filesobj_files): %.o: %.c +$(program_obj_files): %.o: %.c $(CC) -c $(FLAGS) $^ -o $@ # -------------------------- @@ -39,7 +40,7 @@ unitTests: TEST_BIN = runTests unitTests: stack.o test_stack.o - $(CC) $(FLAGS) -I$(unityfolder) -o $(TEST_BIN) stack.o test_stack.o $(unityfolder)/unity.c + $(CC) $(FLAGS) $(ASAN_FLAGS) -I$(unityfolder) -o $(TEST_BIN) stack.o test_stack.o $(unityfolder)/unity.c test_stack.o: test_stack.c $(CC) $(FLAGS) -I$(unityfolder) -c test_stack.c -o test_stack.o @@ -49,7 +50,7 @@ test_stack.o: test_stack.c # -------------------------- clean: ifeq ($(OS),Windows_NT) - del /f *.o doble + rm -f *.o doble else rm -f *.o doble endif \ No newline at end of file diff --git a/stack.c b/stack.c index 324faa4..5cd0d1a 100644 --- a/stack.c +++ b/stack.c @@ -1,5 +1,13 @@ -#include #include "stack.h" +#include +#include + +/*typedef struct { + + void *data; + struct StackNode *next; + +} StackNode;*/ // TODO: grundlegende Stackfunktionen implementieren: /* * `push`: legt ein Element oben auf den Stack, @@ -60,17 +68,18 @@ StackNode *pop(StackNode *stack) void *top(StackNode *stack) { return stack != NULL ? stack->data : NULL; } // Clears stack and releases all memory. -void clearStack(StackNode *stack) +void clearStack(StackNode **stack) { - while (stack != NULL) + while (*stack != NULL) { - StackNode *next = (stack)->next; - free(stack); - stack = next; - (stack)->data = NULL; - (stack)->next = NULL; - (stack)->prev = NULL; + StackNode *next = (*stack)->next; + free(*stack); + (*stack)->data = NULL; + (*stack)->next = NULL; + (*stack)->prev = NULL; + (*stack) = next; + } } \ No newline at end of file diff --git a/stack.h b/stack.h index c835596..8119b2c 100644 --- a/stack.h +++ b/stack.h @@ -1,13 +1,23 @@ #ifndef STACK_H #define STACK_H -/* A stack is a special type of queue which uses the LIFO (last in, first out) principle. -This means that with each new element all other elements are pushed deeper into the stack. -The latest element is taken from the stack. */ +/* A stack is a special type of queue which uses the LIFO (last in, first out) +principle. This means that with each new element all other elements are pushed +deeper into the stack. The latest element is taken from the stack. */ #include -//TODO: passenden Datentyp als struct anlegen +// TODO: passenden Datentyp als struct anlegen + +typedef struct StackNode { + + void *data; + struct StackNode *next; + struct StackNode *prev; + +} StackNode; + +StackNode *createNode(void *data); typedef struct StackNode { @@ -22,14 +32,14 @@ StackNode *createNode(void *data); // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data); -// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be -// freed by caller.) +// Deletes the top element of the stack (latest added element) and releases its +// memory. (Pointer to data has to be freed by caller.) StackNode *pop(StackNode *stack); // Returns the data of the top element. void *top(StackNode *stack); // Clears stack and releases all memory. -void clearStack(StackNode *stack); +void clearStack(StackNode **stack); #endif diff --git a/test_stack.c b/test_stack.c index a5b69af..a9f9914 100644 --- a/test_stack.c +++ b/test_stack.c @@ -37,7 +37,7 @@ void test_clearStack(void) { } //printf("testints: %d,%d,%d,%d,%d",testInts[0],testInts[1],testInts[2],testInts[3],testInts[4]); - clearStack(testStack); + clearStack(&testStack); TEST_ASSERT_NULL(testStack); } @@ -57,4 +57,4 @@ int main(void) { RUN_TEST(test_clearStack); return UNITY_END(); -} \ No newline at end of file +}