我試圖將一個字符串拆分成句子(由句子分隔符分隔)。代碼本身工作,但我不斷收到內存泄漏的功能。與strtok分隔句子時的內存泄漏
char ** splitSentences(char *string) {
int sentencecount = 0;
char* buf = NULL;
char* str = NULL;
buf = malloc((strlen(string) + 1) * sizeof(char));
strcpy(buf,string);
str = buf;
sentencecount = countSentences(str);
if(sentencecount != 0)
{
char** sentences = NULL;
sentences = malloc((sentencecount + 1)*sizeof(char*));
memset(sentences,0,sentencecount+1);
char* strToken = NULL;
strToken = malloc((strlen(str)+1)*sizeof(char));
memset(strToken,0,strlen(str)+1);
strToken = strtok(str, SENTENCE_DELIMITERS);
int i = 0;
while(strToken != NULL) {
sentences[i] = NULL;
sentences[i] = malloc((strlen(strToken)+1)*sizeof(char));
strncpy(sentences[i], strToken,strlen(strToken) + 1);
strToken = strtok(NULL, SENTENCE_DELIMITERS);
i++;
}
sentences[sentencecount] = NULL;
//Free the memory
free(strToken);
strToken = NULL;
free(buf);
buf = NULL;
return sentences;
}
return NULL;
}
我找不到爲什麼會出現內存泄漏。有人知道嗎?
您還可以將所有'malloc/memset'組合組合到'calloc'調用中,這將使您的代碼更易於捕捉。 – 2010-08-05 15:10:16
您可以調用malloc()四次並釋放()兩次。你必須釋放()你的malloc()。 – Dingo 2010-08-05 15:11:04