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_command
在 ft_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数组
我不明白为什么我要对这个错误进行排序"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_command
在 ft_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数组