C 语言中的 monty pop 操作码

monty pop opcode in C

提问人:scisamir 提问时间:10/24/2023 最后编辑:Marco Bonelliscisamir 更新时间:10/24/2023 访问量:42

问:

我尽了我所能,调试了超过 24 小时,但仍然无法修复这个错误。 我正在尝试实现 monty intepreter 的 pop 操作码。

使用 test.m 文件进行测试:

push 1
push 2
push 3
pall
pop
pall
pop
pall
pop
pall

这是我在测试实现时得到的输出:

3
2
1
0
1
free(): double free detected in tcache 2
Aborted (core dumped)

取而代之的是:

3
2
1
2
1
1

pop 操作码实现:

#include "monty.h"

/**
 * pop - removes the top element of the stack
 * @stack: the stack
 * @line_number: current line number of the bytecode file
 *
 * Return: Nothing
 */

void pop(stack_t **stack, unsigned int line_number)
{
    stack_t *temp = NULL;

    if (*stack == NULL)
    {
        dprintf(2, "L%d: can't pop an empty stack\n", line_number);
        exit(EXIT_FAILURE);
    }

    temp = *stack;
    *stack = (*stack)->prev;

    temp->prev = NULL;
    free(temp);

    if (*stack)
        (*stack)->next = NULL;
}

项目存储库:https://github.com/scisamir/monty/

C 指针 内存 空闲

评论

2赞 teapot418 10/24/2023
(/a?) 错误位于您显示的代码之外。(你希望它能够改变指针,所以不要按值传递它,使用双指针fail_check = check_opcode(words[0], lineno, top);toppush)
3赞 teapot418 10/24/2023
你的问题不应该依赖于外部链接来理解。另请参阅最小可重现示例

答: 暂无答案