为什么我的2d c数组仅用于值< 4?

时间:2014-12-04 03:50:18

标签: c parsing segmentation-fault multidimensional-array

我是c编程新手。我做了一个解析器,它获取一个char数组(一个命令,后来也应该有参数),并应将它分成更小的数组。从那里我想进一步分析每个阵列自己。可能有更好的方法来解决这个问题,但我真的只是想了解这里发生了什么。

当我运行调试器时(是的,我确实运行了调试器),它告诉我此行存在分段错误。

commandArray[kk][ii - jj] = (char) input[ii];

这只发生在kk>之后3但适用于所有较小的数字。当我使用不同的字符串时,在kk> 3时也会出现同样的问题。 kk == 4 (ii - jj)== 0

当我想用字符填充二维数组时会发生这种情况。

//fill each Array entry with a command (a command is just a string)
jj = 0;
kk = 0;
ii = 0;

while (ii != (int) strlen(input)) {

    commandArray[kk][ii - jj] = (char) input[ii];

    if ((char) input[ii] == ';') {
        commandArray[kk][ii - jj + 1] = '\0';
        jj = ii + 1;
        kk++;
    }
    ii++;
}

我很确定我已正确声明了2d数组:

//allocate space for each command
commandArray = (char**) calloc(numberOfCommands, sizeof(char)); //create n char arrays
for (ii = 0; ii < numberOfCommands; ii++) {
    commandArray[ii] = (char*) calloc((lengthOfCommand[ii]), sizeof(char));
}

我不知道你需要更多代码所以我用了pastebin来包含我的完整代码(~100行)

调用我的函数的Main:

http://pastebin.com/P9TfDUs7

完整的Parser.c文件:

http://pastebin.com/WFvrLS1r

和Parser.h:

#ifndef PARSER_H_
#define PARSER_H_

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void command(char* commandArray);



#endif /* PARSER_H_ */

1 个答案:

答案 0 :(得分:0)

每个命令条目都是char s的字符串。当你为这些字符串分配内存时(我认为是正确的)你会得到指向每个字符串中第一个char的指针。

因此,您的命令数组实现为指针的列表。但是当你为指针列表分配内存时,你只允许每个指针有足够的空间来容纳char。指针值(本质上是一个内存位置)极不可能适合char

尝试更改您的第一个calloc来电,以便第二个参数为sizeof(char *)

如果不清楚,编写一个小程序来打印sizeof(char)sizeof(char *)可能会有所帮助。