diff --git a/stack.c b/stack.c
index 2bce8f20e53dcab89df1b13d7851cbb413282460..27469186a0c3fb480eb73d281b64eac8d52ed6bd 100644
--- a/stack.c
+++ b/stack.c
@@ -1,8 +1,18 @@
 #include <stdio.h>
+#include <stdlib.h>
 #include "stack.h"
 
+#define DEFAULT_CAPACITY 4
+
+void stack_init(stack *s)
+{
+    s->top = -1;
+    s->capacity = DEFAULT_CAPACITY;
+    s->data = malloc(sizeof(int) * DEFAULT_CAPACITY);
+}
+
 void stack_peek(stack s, int *value){
-    if(stack_is_empty(s)){
-        *value=s.data[s.top];
+    if (!stack_is_empty(s)) {
+        *value = s.data[s.top];
     }
 }
diff --git a/stack.h b/stack.h
index b1ac1daca11f8eb0cbe7e5698b829c71cf9a3264..8da80c2f2fff5493b622780eb35d4157b1362621 100644
--- a/stack.h
+++ b/stack.h
@@ -7,6 +7,8 @@ typedef struct _stack {
     int top;
 } stack;
 
+void stack_init(stack *stack);
+
 void stack_peek(stack s, int *value);
 
 #endif