1
나는 프로그래밍 클래스 중 하나에 대한 셸을 생성합니다. 나는 commandLine 클래스가 쉘에 입력 된 명령을 구문 분석하고, argv를 동적으로 할당하고 명령의 수에 따라 argc를 설정하기위한 클래스이다. 내가 왜 argv에 대한 배열에 대한 포인터 배열을 동적으로 할당 한 후에 세분화 오류가 발생하는지 알 수 없다.이상한 세그먼테이션 오류 동적으로 배열을 할당 할 때
이것은 클래스의 생성자입니다. 왜 내가이 잘못을 저지르고 있는지 알 수있는 사람이 있다면, 나는 어떤 도움을 주셔서 감사합니다. 감사
CommandLine::CommandLine(istream& in){
char * userInput = new char[256];
char * pointer = &userInput[0];
char cmdStorage[128][32];
int cmdLength = 0;
int argCount = 0;
in.getline(userInput,256);
while(1)
{
if (*pointer == ' ' || *pointer == '\0')
{
if (cmdLength != 0)
argCount++;
cmdLength = 0;
if (*pointer == '\0')
break;
}
else
{
cmdStorage[argCount][cmdLength] = *pointer;
cmdLength++;
}
pointer++;
}
*argv = (char *) calloc(argCount,sizeof(char*));
for (int i = 0; i < argCount; i++)
{
argv[i] = (char *) calloc(33,sizeof(char));
memcpy(argv[i],cmdStorage[i],sizeof(cmdStorage[i]));
}
argc = argCount;
}
C++ 방식으로 시도해 볼 수 있을까요? 아니면 C로 설정되어 있습니까? –
'char *'대신'calloc (argCount, sizeof (char))','char'을 사용했다고 생각합니다. – brokenfoot
아마도 문제는 아니지만 'cmdLength'가 범위 내에 있는지 확인해야합니다. 어떤 입력이 segv를 발생 시키는가? – Keith