I was trying to create a Stack using struct
in C as this:
typedef struct
{
int index;
int* stack;
} Stack;
and a function to allocate memory for it:
Stack* getNewStack(void) // function to get a new stack
{
Stack *temp = (Stack*)malloc(sizeof(Stack)); // allocating memory for struct
if (temp == NULL)
{
printf("Error : Memory allocation failed!\n");
return NULL;
}
temp->stack = (int*)malloc(sizeof(int) * 5); // allocating memory for pointer
if (temp->stack == NULL)
{
printf("Error : Memory allocation failed!\n");
return NULL;
}
temp->index = 0;
temp->stack[0] = 0; // init it to 0
return temp;
}
push function:
void push(Stack* stk, const int value) // function to push a value in stack
{
if (stackNull(stk)) // checks stk == NULL
return;
if (stk->index + 1 == sizeof(stk->stack)/sizeof(stk->stack[0]))
stk->stack = (int*)realloc(stk->stack, sizeof(int) * (stk->index + 10));
// in case stack gets full, it will be increased by 10
stk->stack[stk->index++] = value;
}
in main function:
int main()
{
Stack* new = getNewStack();
for (int i = 0; i < 30; ++i)
push (new, i + 1);
for (int i = 0; i < 30; ++i)
printf("%d ", new->stack[i]);
printf("\n");
return 0;
}
compile and run using:
gcc test.c -o test && ./test
output:
malloc(): corrupted top size
Aborted (core dumped)
I don't understand why, Surprisingly enough, if i simply just push, and don't print anything, it compiles and executes successfully.
Moreover, if i add printf(" ");
in the function getNewStack
, like this :
Stack* getNewStack(void) // function to get a new stack
{
printf(" ");
Stack *temp = (Stack*)malloc(sizeof(Stack)); // allocating memory for struct
// ...
// rest code same as above
}
it somehow works and prints out the desired output.
What am i missing or doing wrong ?