我正在批改一堆学生的作业。
他们正在设计自己的动态数组数据类型。我正在寻找一种很好的方法来测试,以确保他们在重新调整大小时为数组分配正确的内存量。
除了检查代码,是否有一些方法可以轻松地测试由malloc调用创建的内存量?它们应该跟踪容量,但我需要测试它们是否正确地这样做。
我也希望如果测试没有在段错误结束,如果他们没有分配足够的内存,以便我可以继续运行其他测试。
谢谢!
通过重新定义标准函数名,您可以为您的测试提供您自己的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);
}
我认为您期望的问题应该通过在Valgrind中运行学生程序来捕获。这是一个好主意,因为它也可能捕获其他不必要的问题,例如越界访问。