J'ai écrit la fonction suivante:à double libre ou la corruption (en haut) dans la section SI de la fonction
/*!
* @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;
}
}
Si je cours avec la partie problématique décommentée je reçois un
double libération ou corruption (en haut)
erreur. Pourquoi est-ce? La mémoire ne devrait-elle pas être libérée dans la partie que la fonction retourne? Ou ai-je foiré le paramètre if et les deux instructions sont utilisées - ce que je n'espère pas, parce que le code fonctionne comme prévu autrement.
Merci de votre aide pour comprendre cette question!
Après 'buffer = strstr (buffer2, mot-clé)' vous ne pouvez plus 'free (buffer)'. Peut seulement 'libérer 'la valeur' malloc' vous a donné. –
En bonus, vous avez aussi fui la mémoire de 'buffer = malloc (256);' dès que vous avez fait 'buffer = strstr (buffer2, keyword))'. En regardant ce code, * aucun * ne semble justifié. Vous enveloppez effectivement 'strstr' avec un tas de gestion de mémoire inutile qui n'est pas nécessaire. * Tout * de ceci devrait être simplement remplaçable, 'return strstr (chkstring, mot-clé)! = NULL;' – WhozCraig