Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用动态数组在堆栈上实现Push()_C_Data Structures_Stack - Fatal编程技术网

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

C 使用动态数组在堆栈上实现Push(),c,data-structures,stack,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 = rea

我的结构如下:

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;
}
任何帮助都将不胜感激,请提前感谢

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

当调用该行时,
p->array
应为分配内存或
NULL
值(如果
NULL
返回新内存)。未看到
p->array
的初始化。

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


当调用该行时,
p->array
应为分配内存或
NULL
值(如果
NULL
返回新内存)。未看到
p->array
的初始化。

如果(p->top>=p->capacity)
看起来更好您从未初始化
array
;在
createStack
中将其设置为
NULL
malloc
上的常见注释:不要强制转换返回值,因为它可能会隐藏一个忘记的
#include
。更简单的方法是使用
ArrayStack*ret=malloc(sizeof*ret)ArrayStack
,则不必替换2或3个实例(另外:
sizeof
不是一个函数,而是一个运算符)。同上
int*ins=malloc(sizeof*ins)。注:通常,在声明指针时,
*
运算符位于变量名旁边,而不是类型旁边。@Evert:最后一点是风格上有争议的问题,请注意。我建议您将容量设置为更大的数字,比如说10,否则您将主要执行重新分配。在每次重新分配之前将容量增加1,在运行时方面不会给您带来任何好处。
如果(P->top>=P->capacity)
看起来更好您从未初始化过
数组
;在
createStack
中将其设置为
NULL
malloc
上的常见注释:不要强制转换返回值,因为它可能会隐藏一个忘记的
#include
。更简单的方法是使用
ArrayStack*ret=malloc(sizeof*ret)ArrayStack
,则不必替换2或3个实例(另外:
sizeof
不是一个函数,而是一个运算符)。同上
int*ins=malloc(sizeof*ins)。注:通常,在声明指针时,
*
运算符位于变量名旁边,而不是类型旁边。@Evert:最后一点是风格上有争议的问题,请注意。我建议您将容量设置为更大的数字,比如说10,否则您将主要执行重新分配。在每次重新分配之前将容量增加1,在运行时方面不会给您带来任何好处。
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);
    }