【发布时间】:2014-03-27 22:22:34
【问题描述】:
我正在为我的一个编程类创建一个 shell。我有一个 commandLine 类,用于解析输入到 shell 中的命令,并根据命令的数量动态分配 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 上?
-
我认为您的意思是
calloc(argCount,sizeof(char)),char而不是char*。 -
也许不是问题,但您应该检查
cmdLength是否在范围内;什么输入导致 segv? -
还有:
argv定义在哪里;是否已分配且可写? -
*argv = (char *) calloc(argCount,sizeof(char*));-->argv = (char **) calloc(argCount, sizeof(char*));
标签: c++ c segmentation-fault