【问题标题】:Weird Segmentation Fault When dynamically allocating Array动态分配数组时出现奇怪的分段错误
【发布时间】: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


【解决方案1】:

错误在这里:

memcpy(argv[i],cmdStorage[i],sizeof(cmdStorage[i]));

sizeof(cmdStorage[i])&gt;argv[i] 指向的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2021-08-04
    • 2012-05-11
    • 2010-12-27
    • 1970-01-01
    • 2011-07-28
    • 2015-02-08
    相关资源
    最近更新 更多