Вы можете предоставить собственную версию malloc()
, calloc()
, realloc()
и free()
для своих тестов, переопределив стандартные имена функций.
С помощью gcc я бы создал объектный файл с функциями замены
gcc -c myfunctions.c -omyfunctions.o
и скомпилируйте тестовые файлы с переопределением и ссылкой на замену
gcc myfunctions.o -Dmalloc=mymalloc -Dcalloc=mycalloc -Drealloc=myrealloc -Dfree=myfree testfile.c
вместо того, что студенты используют
gcc testfile.c
Реализация функций my*()
не должна быть слишком сложной. В основном они проверяют параметры и вызывают исходные функции.
/* myfunctions.c */
#include <stdlib.h>
void *mymalloc(size_t s) {
/* test s */
return malloc(s);
}
void *mycalloc(size_t n, size_t s) {
/* test n and s */
return calloc(n, s);
}
void *myrealloc(void *p, size_t s) {
/* test p and s */
return realloc(p, s);
}
void myfree(void *p) {
/* test p */
free(p);
}