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