diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..96249cede61f2cea6cf2a665bfce534ab0b1bee5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.o
+main
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8af50656ccfdde0951d485cb65837405e468ad0c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+CC=gcc
+CFLAGS=-Wall -Wextra -pedantic -g -std=c11 -O3
+CFLAGS_ASAN=-fsanitize=address -fno-omit-frame-pointer
+LDFLAGS=-lm
+LDFLAGS_ASAN=-fsanitize=address -fno-omit-frame-pointer
+
+main: stack.o main.o
+	$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LDFLAGS_ASAN)
+
+%.o: %.c 
+	$(CC) $(CFLAGS) $(CFLAGS_ASAN) -c $^ -o $@
+
+clean:
+	rm -f *.o main
diff --git a/main.c b/main.c
index d42583f0d6614555e53d3ce9c08513ff630c6823..28bc37d3c95fc94c1a166bb7841d38d75cc82e25 100644
--- a/main.c
+++ b/main.c
@@ -4,7 +4,19 @@ int main(){
 	stack s;
 	int value = 0;
 	stack_init(&s);
+
+	for (int i = 0; i < s.capacity; i++){
+		s.top += 1;
+		s.data[s.top] = i;
+		printf("push : %d\n", s.data[s.top]);
+	}
+	
 	// stack_is_empty(stack s)
-	stack_peek(s, &value);
 	stack_pop(&s, &value);
+	stack_peek(s, &value);
+
+	free(s.data);
+	s.data = NULL;
+	s.capacity = -1;
+	s.top = -1;
 }
\ No newline at end of file
diff --git a/stack.c b/stack.c
index 9da70efb8799b3edf5a7505667284e3903d50c43..feee0645dadad997f564dcc030bfd55b3f270210 100644
--- a/stack.c
+++ b/stack.c
@@ -21,13 +21,18 @@ void stack_pop(stack *s, int *value){
 	if (stack_is_empty(*s)){
 		return;
 	}	
+
+	if (s->top == s->capacity/4){
+		s->capacity /= 2;
+	}
+	
 	*value = s->data[s->top];
-	s->top -= 1;
 	printf("pop : %d, top : %d\n", s->data[s->top],s->top);
+	s->top -= 1;
 
-	// si capacite 2x trop grande, on la rend plus petite
-	if (s->capacity > 2*s->top){
-		s->capacity = s->top;
-		s->data = realloc(s, sizeof(int)*s->capacity);
-	}
+	// // si capacite 2x trop grande, on la rend plus petite
+	// if (s->capacity > 2*s->top){
+	// 	s->capacity = s->top;
+	// 	s->data = realloc(s, sizeof(int)*s->capacity);
+	// }
 }