检查C中是否错置了正确的数组长度



我正在批改一堆学生的作业。

他们正在设计自己的动态数组数据类型。我正在寻找一种很好的方法来测试,以确保他们在重新调整大小时为数组分配正确的内存量。

除了检查代码,是否有一些方法可以轻松地测试由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中运行学生程序来捕获。这是一个好主意,因为它也可能捕获其他不必要的问题,例如越界访问。

相关内容

  • 没有找到相关文章

最新更新