所以我有一个非常奇怪的错误,我无法理解。我正在运行循环并检查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值...
答案 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 因为当我走出界限并检查空值时,它只是有一些未分配的内存块而且我遇到了麻烦。