나는 프로그램이 그래서 내 특정 인수와 함께 실행할 수있는 위치를 찾기 위해 리눅스 시스템에서 절대 경로를 테스트하기 위해 노력하고있어. 문제는, 내가 그것을 발견 할 때, 동적 인 할당 된 메모리를 해제함으로써 메모리 누출뿐만 아니라 올바른 경로에 더 많은 문자열을 계속 추가한다는 것이다. 스택 덤프에 대한 픽스 만이 해제되지 않습니다 (ret). 나는 "ls"로 예제를 실행할 때 프로그램을 찾고 실행하지만 gdb를 기반으로한다고 믿는다.execv와 및 테스트 올바른 절대 경로
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이 올바르게 수행되었다고 생각합니다. 도움을 주셔서 감사합니다.
문제를 재현하는 데 사용할 수있는 최소한의 완전하고 작업 코드 예제를 게시하시기 바랍니다. 버그가있는 곳에서 제공 한 코드에서 명확하지 않습니다. 예를 들어, 루프에 들어가기 전에 어떻게 든'ret'를 초기화합니까? 그렇지 않다면 - 당신이 간다. –