c - Realloc Arguments -
i implementing stack using arrays below code
#include<stdio.h> #include<stdlib.h> #include<string.h> struct stack{ int top; int capacity; int *array; }; struct stack *createstack() { struct stack *stack=malloc(sizeof(struct stack)); stack->top=-1; stack->capacity=1; stack->array=malloc(sizeof(sizeof(int)*stack->capacity)); } void doublestack(struct stack *stack) { stack->capacity=stack->capacity*2; stack->array=realloc(stack,stack->capacity); } void push( struct stack *stack , int data) { if(stack->top==(stack->capacity)-1) doublestack(stack); stack->array[++stack->top]=data; } my doubt is, when doublestack called once stack full, should use stack->array first argument of realloc() or stack first argument of realloc()?
well think stack->array should passed. need reallocate portion of memory.
but accidentally passed stack , seemed work. please advise.
you should pass realloc pointer array wish extend. since stack not array wish extend, , stack->array is, should pass stack->array first parameter.
however, should store result of realloc in separate variable , null check.
if function fails allocate requested block of memory, null pointer returned, , memory block pointed argument ptr not deallocated (it still valid, , contents unchanged).
otherwise risk creating memory leak:
int *tmp = realloc(stack->array, stack->capacity); if (tmp) { stack->array = tmp; } else { ... // deal allocation error here }
Comments
Post a Comment