Auriez-vous une solution pour détecter les erreurs de memoire dans un programme en C? :  Salut,

je suis actuellement en train de recoder certaines fonctions de la lib C et je suis confronté à un problème de type "détection d'erreur mémoire".

Pour la fonction strcpy,

...

    char *my_strcpy(char *str1, char *str2)
    {
        int i = 0;
    
        for (; str2[i] != 0; i++)
            str1[i] = str2[i];
        str1[i] = 0;
        return (str1);
    }

...

en utilisant le test criterion suivant:

...

    #include <criterion/criterion.h>
    
    char *my_strcpy(char *str1, char *str2);
    
    Test(my_strcpy, in_allocated_string)
    {
        char *src = "Hello World";
        char dest[11];
    
        my_strcpy(dest, src);
        cr_assert_str_eq(dest, "Hello World");
        cr_assert_eq(dest, my_strcpy(dest, src));
    }

...

la destination étant plus petite que la source je devrai obtenir un segfault, pourtant ni valgrind ni scan build ne me donne d'information ou d'erreur, le programme compile et s'execute sans erreur.

je vous laisse un petit makefile pour compile avec ou sans les tests.

...

    SRC	=	code.c			\
    
    SRC_TEST	=	test.c	\
    
    LDFLAGS	=	-L./lib/my -lmy
    
    OBJ	=	$(SRC:.c=.o)
    
    CC	=	gcc
    
    CFLAGS	=	-W -Wall -Wextra -Werror -fstack-protector -fstack-protector-all -fstack-protector-strong -Wstack-protector
    
    NAME	=	libmy.a
    
    all: $(NAME)
    
    $(NAME):	$(OBJ)
    		ar rc	$@ $^
    
    test:	$(SRC) $(SRC_TEST)
    		$(CC) -fprofile-arcs -ftest-coverage -Isrc/main -DMOCKING $(CFLAGS) $(shell pkg-config --libs --cflags criterion) $^ -o tests
    		./tests
    
    clean:
    		rm -rf *.gcda *.gcno *.info $(OBJ)
    
    fclean:	clean
    		rm -f $(NAME)
    		rm -rf tests
    
    re: fclean all

...

Auriez-vous une solution pour détecter les erreurs de memoire dans un programme en C ?




