我正在给一堆学生作业评分。
他们正在设计自己的动态数组数据类型。我正在寻找一种好的测试方法,以确保在重新调整大小时它们可以为数组提供正确的内存量。
除了检查代码之外,还有一些方法可以轻松测试malloc调用创建的内存量吗?他们应该跟踪容量,但我需要测试他们是否正确这样做。
如果测试没有在段错误中结束,如果他们没有分配足够的内存以便我可以继续运行其他测试,我也会喜欢它。
谢谢!
答案 0 :(得分:4)
您可以通过重新定义标准函数名称为测试提供自己的malloc()
,calloc()
,realloc()
和free()
版本。
使用gcc,我将使用替换函数
创建一个目标文件gcc -c myfunctions.c -omyfunctions.o
并使用redefiniton编译测试文件并链接到替换
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 :(得分:1)
我认为应该通过在Valgrind中运行学生的课程来解决您期望的问题。无论如何,这是一个好主意,因为它也可能会捕获其他不需要的问题,例如:越界访问。