2014-09-12 78 views
5

所以我有一個非常奇怪的錯誤,我無法理解。我正在運行循環和檢查NULL值,然後我想終止循環。但是,我得到一些EXC_BAD_ACCESS的問題後,我有以下值(正如你所看到的截圖)需要幫助瞭解C程序中發生了什麼

這是一個返回字符的字符串

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

+1

在增加它之前,您應該檢查'*(* tk).currentToken'。 – Sheljohn 2014-09-12 23:49:37

+2

你不會超出'currentToken'範圍?你如何創建所有這些指針? – 2014-09-12 23:55:56

+1

「_我不知道爲什麼會出現這個錯誤。」 - 典型的指針指向沒有內存。 – JosEduSol 2014-09-13 00:01:54

回答

0

好的。感謝Joachim和JosEdu,我修復了我的代碼。 words =(char **)malloc(sizeof(char *)* numberOfWords);需要numberOfWords + 1 因爲當我走出界限並檢查空值時,它只是有一些沒有分配的內存塊,我遇到了麻煩。

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;