使用动态数组在堆栈上实现Push()

时间:2017-02-08 05:44:05

标签: c data-structures stack

我有以下结构:

typedef struct{
    void** array;
    int top;
    int capacity;
} ArrayStack;

和Push()函数如下:

void push(ArrayStack* P, void* data){
    P->top++;
    if(P->top <= P->capacity){
        P->capacity++;
        P->array = realloc( P->array, (P->capacity) * sizeof(void*) );
    }

    P->array[P->top] = data;
}

然而,在尝试将数据分配给阵列时失败了,可能会出现什么问题?我在这做错了什么?

以下是我用来测试函数createStack()的代码:

ArrayStack* createStack(){
    ArrayStack* ret = (ArrayStack*) malloc(sizeof(ArrayStack));
    ret->top = -1;
    ret->capacity = 0;
    return ret;
}
  int main(){
        ArrayStack* testStack = createStack();
        int* ins = (int*) malloc(sizeof(int));
        *ins = 123;
        push(testStack, ins);
    }    

任何帮助将不胜感激提前

1 个答案:

答案 0 :(得分:2)

P->array = realloc( P->array, (P->capacity) * sizeof(void*) );

调用此行时p->array应为已分配的内存或NULL值(如果NULL返回新内存)。没有看到p->array的初始化。