Для одного из моих школьных заданий я должен сделать свою собственную библиотеку стека и калькулятор POSTFIX.Калькулятор должен использовать библиотеку стеков и выполнять некоторые вычисления.
Я помещаю два разных числа в свой стек.Номер 6 и 3. Заголовок должен указывать на последний добавленный узел (LIFO).Поэтому при добавлении 6:
HEADER -> 6 -> NULL
Когда добавляется 3:
HEADER -> 3-> 6 -> NULL
Когда я печатаю значение моего заголовка после добавления '6', это хорошо.Это печать 6. Однако, когда я печатаю значение моего заголовка ДО добавления '3', это печатает '3'.Когда он все еще должен вывести 6.
Итак, краткое изложение моей проблемы: при добавлении другого узла в мой связанный список заголовок внезапно указывает на самый новый узел, даже не меняя его.
Вы можете понятьмне лучше с некоторым кодом и результатами отладки.Кстати: не возражайте против typedefs, они мне не нравятся.Мой учитель хочет, чтобы мы его использовали.
typedef struct stackObject* pStackObject_t;
typedef struct stackObject
{
void* obj;
pStackObject_t next;
} StackObject_t;
typedef struct stackMEta* pStackMeta_t;
typedef struct stackMEta
{
pStackObject_t stack;
size_t objsize;
int numelem; //number of elements
int handle; //welke stack
pStackMeta_t next;
} StackMeta_t;
int mystack_push(int handle, void* obj)
{
**DELETED NON RELATED CODE BASED ON FEEDBACK**
if (currentMeta->handle == handle)
{
pStackObject_t newObject = malloc(sizeof(StackObject_t));
newObject->obj = obj;
printf("%s%d\n", "Wanting to push int to stack: ", *(int*)obj);
//First node
if (currentMeta->stack == NULL)
{
currentMeta->stack = newObject;
currentMeta->stack->next = NULL;
printf("%s%d\n", " FIRST Curentmeta->stack pointing to ", *(int*)currentMeta->stack->obj);
return 0;
}
else
{
printf("%s%d\n", "NOT FIRST Currentmeta->stack pointing to ", *(int*)currentMeta->stack->obj);
newObject->next = currentMeta->stack;
currentMeta->stack = newObject;
printf("%s%d\n", "Currentmeta->stack ", *(int*)currentMeta->stack->obj);
printf("%s%d\n", "Currentmeta->stack->next ", *(int*)currentMeta->stack->next->obj);
printf("%s%d\n", "Succesful pushed int to stack: ", *(int*)currentMeta->stack->obj);
return 0;
}
}
return -1;
}
Terminal:
Created stack with handle: 1 and objsize 4 bytes
Wanting to push int to stack: 6
FIRST Curentmeta->stack pointing to 6
Wanting to push int to stack: 3
NOT FIRST Currentmeta->stack pointing to 3
Currentmeta->stack 3
Currentmeta->stack->next 3
Succesful pushed int to stack: 3
Мои модульные тесты работают хорошо с этим кодом.Мой калькулятор не работает, хотя это тот же самый вызов функции.