13
getopt_long_only를 사용하여 명령 줄을 구문 분석하려고합니다. 내 응용 프로그램은 몇 가지 명령 행 옵션을 읽습니다.getopt_long_only 세분화 오류
예. "app --alpha = 1 - 베타 = 2 --cecil = 3"
유효한 명령 줄 매개 변수가 전달되는 한 getopt_long_only는 정상적으로 작동합니다. 그러나 잘못된 "단일 점선 "옵션을 사용하면 부적절한 장소에서 seg fault crash가 발생합니다. 무슨 일 이니? getopt_long_only가 잘못된 인수에 대해 복원력이없는 것처럼 보입니다. 아니면 함수를 잘못 호출 했습니까?
예 : 아래
> ./app --beta=1 -?
starting
index = 1 ret=0 optarg=1
Segmentation fault
코드 (C++ : app.cc)
#include <stdio.h>
#include <getopt.h>
void ProcessCommandLineArgs(int argc, char** argv)
{
option longopts[] = {
{"alpha", optional_argument, 0, 0},
{"beta", optional_argument, 0, 0},
{"cecil", optional_argument, 0, 0}
};
int index;
int ret;
bool fParseError = false;
while (true)
{
ret = ::getopt_long_only(argc, argv, "", longopts, &index);
if (ret < 0)
{
break;
}
if ((ret == '?') || (ret == ':'))
{
fParseError = true;
break;
}
printf("index = %d ret=%d optarg=%s\n", index, ret, optarg?optarg:"<null>");
}
}
int main(int argc, char** argv)
{
printf("starting\n");
ProcessCommandLineArgs(argc, argv);
printf("exiting\n");
return 0;
}
'int index;'를'int index = 0';로 변경하면 여전히 충돌이 발생합니까? – OneOfOne
감사합니다 1of1. 내가 그것을했을 때 실제로 멈추지 않았다. 어떤 의미가 없어 .... 그래서 나는 man 페이지에서 더 깊은 잠수를했다. 그 결과, 배열의 마지막 행을 올바르게 null로 끝내는 것을 잊고 있다는 것을 알게되었습니다. – selbie