IF部分我已經寫了如下功能腐敗(上):雙免費或功能
/*!
* @brief Checks if a string contains a certain keyword
* @param char *chkstring - String to search in
* @param char *keyword - String to search for
* @return int - 1 if found, 0 if not found
*/
int check_string(char *chkstring, char *keyword)
{
char *buffer;
char *buffer2;
buffer = malloc(256);
buffer2 = malloc(256);
strcpy(buffer2,chkstring);
if((buffer = strstr(buffer2,keyword)) != NULL) // Check for first appearance of keyword in chkstring
{
//free(buffer); // <- Problem sits here
//free(buffer2); // and/or here
return 1; // if something is found, return 1
}
else
{
free(buffer); // else return 0
free(buffer2);
return 0;
}
}
如果我有問題的部分運行它註釋掉我得到一個
雙免費或腐敗(頂部)
錯誤。爲什麼是這樣?函數返回的部分不應該釋放內存嗎?或者我搞砸了if參數,並且都使用了這兩個指令 - 這是我不希望的,因爲代碼的工作原理與其他方式相同。
感謝您的幫助理解此事!
'buffer = strstr(buffer2,keyword)'後不能再有'free(buffer)'。只能'釋放''malloc'給你的價值。 –
作爲一種獎勵,只要你做了'buffer = strstr(buffer2,keyword))',你也從'buffer = malloc(256)'泄露了內存。看看這個代碼,*沒有*它似乎是有保證的。你實際上是在用一堆不需要的不必要的內存管理來包裝'strstr'。 *所有這些應該可以簡單替換,'return strstr(chkstring,keyword)!= NULL;' – WhozCraig