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);
}