Linux マシンで絶対パスをテストして、特定の引数で実行できるようにプログラムの場所を見つけようとしています。問題は、それを見つけたときに、動的に割り当てられたメモリを解放することにより、正しいパスに文字列を追加し続けることと、メモリ リークが発生することです。スタック ダンプの唯一の修正は、free(ret) しないことです。「ls」を使用して例を実行すると、プログラムが検出されて実行されますが、奇妙な結果が得られると gdb に基づいていると思います。
for(j = 0; j < i; j++, path = NULL)
{
token = strtok_r(path, delim, &saver);
if(token == NULL)
break;
else
{
strncat(ret, token, 80);
strncat(ret, "/", 1);
strncat(ret, command, 80);
args[0] = ret;
printf("%s\n", ret);
m = execv(ret, args);
printf("%d\n", m);
if(m < 0)
{
free(ret);
ret = malloc(120*sizeof(char));
}
else
break;
}
}
区切り文字はコロン (:) で、strncat は正しく行われていると思います。よくわかりませんが、助けてくれてありがとう。