Valgrind -> 条件跳转或移动取决于未初始化的值

Valgrind -> Conditional jump or move depends on uninitialised value(s)

我不明白为什么我要对这个错误进行排序"Conditional jump or move depends on uninitialised value(s)",而所有变量都已初始化,包括定义它们。

#include "shell.h"

int     ft_complete_apply_key(t_cmd *cmd)
{
    int     key;

    key = cmd->last_key;
    if (key == KEY_TERM_RIGHT || key == KEY_TERM_LEFT
        || key == KEY_TERM_HOME || key == KEY_TERM_END) // error here
        return (ft_move_cursor(cmd));
    if (key == KEY_TERM_DEL)
        return (ft_complete_apply_del(cmd));
    if (key == KEY_TERM_ENTER)
        return (ft_complete_apply_enter(cmd));
    return (ft_complete_apply_printable(cmd));
}

在您的代码中某处有一行类似于此的行:

var = ft_complete_apply_key( some_command );

很可能 some_command 未初始化,或计算 some_command 的任何其他变量。

some_commandft_complete_apply_key 内变成 cmd 很明显。

int ft_interactive_read_key(void)
{
    int     nread;
    char    seq[4];

    while ((nread = read(STDIN_FILENO, &seq[0], 1)) != 1)
    {
        if (nread == -1)
            return (0);
    }
    if (seq[0] == '\x1b')
    {
        if (read(STDIN_FILENO, &seq[1], 1) != 1)
            return (ft_atoi(seq));
        if (read(STDIN_FILENO, &seq[2], 1) != 1)
            return (ft_atoi(seq));
        return (*(int*)seq);
    }
    else
    {
        return (seq[0]);
    }
}

有人告诉我错误可能来自这个函数。我不明白这怎么可能。此函数的结果进入 cmd->last_key = ft_interative_read_key();

编辑:

其实是来自未初始化的seq数组