Closed hiroin closed 4 years ago
ft_atoi.cを以下のように修正してみてください。
static int answer(char *num, long k, long m)
{
int ans;
int i;
i = 0;
ans = 0;
//while (k >= 0)
while (k > 0)
{
//ans = ans + ((num[i] - 48) * ft_iterative_power(10, k - 1));
ans = ans * 10 + (num[i] - 48);
k--;
i++;
}
if (m == -1)
return (ans * -1);
else
return (ans);
}
Conditional jump or move depends on uninitialised value(s)の意味がいまいちわからないので、なんでこのエラーが上記の修正でなくなるのかわからないので、もっとソースを簡単にして、teratailで聞くか、wakeさん、rnittaさんに解析に出したいですね(^^:
自分の考えを書きます。 main関数でreturnする値は「確定(値が入っている)」したものでないとNGのようです。 → Syscall param exit_group(status) contains uninitialised byte(s) 「確定」とは、例えばrv = 1000だったら、確定。rv = no_pipe(args, vals);だったら、この時点では未確定で、no_pipeの中にとびます。 これをずっとおっていくと…、ft_atoi.cの、 ft_iterative_power関数にたどり着きます。 ft_iterative_powerは再帰関数なので、いつまでも未確定になっちゃいます(もちろん、関数の中に終了条件が書いてあるので、実際は終了するのですが、パーサーはとこまで汲み取ってくれないのだと思います。)。 以上から、このエラーは無視してよいと結論づけますが、レビューのときに説明がめんどいし、自分がチェックするときに邪魔なので、ft_atoi.cを改造してしまうのがいいかなと思います。
修正しました!
[事案] valgrind --leak-check=full --show-leak-kinds=all ./minishell でminishell起動後、exitすると以下のメッセージがでる。