需要帮助了解C程序中发生了什么

时间:2014-09-12 23:45:09

标签: c

所以我有一个非常奇怪的错误,我无法理解。我正在运行循环并检查NULL值然后我想终止循环。但是,我有以下值后会出现一些EXC_BAD_ACCESS问题(如截图所示)

这是返回char字符串

的附加代码
char *TKGetNextToken(TokenizerT *tk) {

    if((*tk).currentToken)
        return *(*tk).currentToken++;
    else
        return NULL;

}

和实际结构

struct TokenizerT_ {
    char **currentToken;
    char **tokens;
}tokenizer;

这就是我的指示:

 char **words;
 words = (char **)malloc(sizeof(char*) * numberOfWords);
 for (int i = 0; i < numberOfWords; i++)
 words[i] = (char *)malloc(strlen(ts)+1);

 tokenizer.tokens = words;
 tokenizer.currentToken = words;

我不知道为什么会出现这种错误以及原因。因为我们可以有指向某处的指针或NULL值... enter image description here

2 个答案:

答案 0 :(得分:1)

您的TKGetNextToken测试从不存在的NULL。最后添加一个NULL条目:

words = (char **)malloc(sizeof(char*) * (numberOfWords +1));
for (int i = 0; i < numberOfWords; i++)
    words[i] = (char *)malloc(strlen(ts)+1);
words[i] = NULL;

答案 1 :(得分:0)

确定。由于Joachim和JosEdu,我修复了我的代码。  words =(char **)malloc(sizeof(char *)* numberOfWords);需要numberOfWords + 1 因为当我走出界限并检查空值时,它只是有一些未分配的内存块而且我遇到了麻烦。