я иметь следующую структуру:Реализовано Нажмите() на стек с помощью динамического массива
typedef struct{
void** array;
int top;
int capacity;
} ArrayStack;
и выталкивающий() функцию, как показано ниже:
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);
}
Любая помощь будет оценили заранее спасибо
'if (P-> top> = P-> capacity)' выглядит лучше –
Вы никогда не инициализировали 'array'; установите его в 'NULL' в' createStack'. – Ryan
Обычный комментарий к 'malloc': не набрасывайте возвращаемое значение, так как оно может, например, скрыть забытый' #include '. Еще проще, используйте 'ArrayStack * ret = malloc (sizeof * ret);' и вам не нужно заменять 2 или 3 вхождения, если вы когда-либо заменяете 'ArrayStack' чем-то другим (дополнительно:' sizeof' не является функцией, но оператор). Ditto 'int * ins = malloc (sizeof * ins);'. NB: обычно оператор '*' сидит рядом с именем переменной, а не типом, при объявлении указателей. –
Evert