Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助理解C程序中发生的事情吗_C - Fatal编程技术网

需要帮助理解C程序中发生的事情吗

需要帮助理解C程序中发生的事情吗,c,C,所以我有一个很奇怪的错误,我无法理解。我运行循环并检查空值,然后我想终止循环。但是,在我获得以下值后,我遇到了一些EXC_BAD_访问问题(如屏幕截图所示) 这是另外一段返回char字符串的代码 char *TKGetNextToken(TokenizerT *tk) { if((*tk).currentToken) return *(*tk).currentToken++; else return NULL; } 和实际结构 struct

所以我有一个很奇怪的错误,我无法理解。我运行循环并检查空值,然后我想终止循环。但是,在我获得以下值后,我遇到了一些EXC_BAD_访问问题(如屏幕截图所示)

这是另外一段返回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;
char**words;
words=(char**)malloc(sizeof(char*)*numberOfWords);
for(int i=0;i
我不知道为什么会发生这种错误以及为什么会发生这种错误。因为我们可以有指向某处的指针或空值。。。
好的。多亏了Joachim和JosEdu,我修正了代码。 words=(char**)malloc(sizeof(char*)*numberOfWords);需要numberOfWords+1
因为当我越界并检查空值时,它只是有一些未分配的内存块,我遇到了麻烦

您的TKGetNextToken测试从不存在的空值。在末尾添加一个空条目:

words = (char **)malloc(sizeof(char*) * (numberOfWords +1));
for (int i = 0; i < numberOfWords; i++)
    words[i] = (char *)malloc(strlen(ts)+1);
words[i] = NULL;
words=(char**)malloc(sizeof(char*)*(numberOfWords+1));
for(int i=0;i
在增加它之前,你也应该检查
*(*tk).currentToken
。你不会超出
currentToken
的范围吗?如何创建所有这些指针?“我不知道为什么会发生此错误”-当指针指向无内存时,这种情况很常见。@JoachimPileborg我添加了带有内存分配的代码