Проверка правильности длины массива в C - PullRequest
1 голос
/ 08 июля 2011

Я оцениваю кучу студенческих заданий.

Они проектируют свой собственный тип данных динамического массива. Я ищу хороший способ проверить, чтобы убедиться, что они неправильно выделяют объем памяти для массива при изменении размера.

Кроме проверки кода, есть ли способ легко проверить объем памяти, созданный вызовом malloc? Предполагается, что они отслеживают емкость, но мне нужно проверить, правильно ли они это делают.

Мне также хотелось бы, чтобы тест не завершился с ошибкой сегмента, если бы он не выделил достаточно памяти, чтобы я мог продолжить выполнение других тестов.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 июля 2011

Вы можете предоставить собственную версию 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);
}
1 голос
/ 08 июля 2011

Я думаю, что проблемы, которые вы ожидаете, должны быть решены путем запуска студенческих программ в Вальгринде.В любом случае, это хорошая идея, поскольку она может также отразить другие нежелательные проблемы, например, доступ за пределы допустимого.

...