Я занимаюсь школьным заданием, я столкнулся с двумя проблемами. Я должен имитировать стеки с массивами. Мой текущий код выглядит следующим образом: (! Пусто (myStack))C: Элемент стека, перезаписанный вызовом функции
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int capacity;
int * array;
int size;
} stack_tt;
int pop(stack_tt * stack_p);
void push(stack_tt * stack_p, int value);
int top(stack_tt * stack_p);
stack_tt * newStack(void);
int empty(stack_tt * stack_p);
int main() {
stack_tt * myStack = newStack();
push(myStack, 123);
push(myStack, 99);
push(myStack, 4444);
while (!empty(myStack)) {
int value;
value = pop(myStack);
printf("popped: %d\n", value);
}
return 0; }
stack_tt * newStack(){
stack_tt * newS = malloc(sizeof(stack_tt) * 20);
(*newS).capacity = 1;
(*newS).size = 0;
return newS;
}
void push(stack_tt * stack_p, int value){
if ((*stack_p).size >= (*stack_p).capacity) {
(*stack_p).capacity*=2;
//realloc(stack_p, stack_p->capacity * sizeof(stack_tt));
}
(*stack_p).array = &value;
(*stack_p).size++;
}
int pop(stack_tt * stack_p){
(*stack_p).size--;
int fap = *(*stack_p).array;
return fap;
}
int empty(stack_tt * stack_p){
if ((*stack_p).size >= 1)
return 0;
return 1;
}
Кулак, когда я называю линии время Он изменяет значение в моем массиве к 1.
во-вторых я m не может изменять отдельные значения в моем массиве, всякий раз, когда я пробую такие вещи: (* stack_p) .array [0] = значение; Он не знает, где в памяти смотреть. Я надеюсь, что кто-то может помочь мне :)
Я попробовал это, я даю мне ошибку: 'Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x0)' – Klopper
@ Клоппер. Конечно, примеры, которые я указал, не единственные проблемы. Невозможно указать каждую ошибку, потому что код неверен на концептуальном уровне. Весь проект придется переписать. Используйте примеры, которые я привел в качестве руководства. – 2501
Спасибо, сейчас я вижу :) Это была отличная помощь! – Klopper