动态分配Array时出现奇怪的分段故障

Weird Segmentation Fault When dynamically allocating Array

本文关键字:分段 故障 Array 动态分配      更新时间:2023-10-16

我正在为我的一个编程类创建一个shell。我有一个命令行类,用于解析输入到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 == '')
        {
            if (cmdLength != 0)
                argCount++;
            cmdLength = 0;
            if (*pointer == '')
                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;
}

错误在这里:

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

sizeof(cmdStorage[i])>, argv[i]所指向的块大小