检查C中是否正确处理了正确的数组长度

时间:2011-07-07 22:21:21

标签: c arrays size malloc

我正在给一堆学生作业评分。

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

除了检查代码之外,还有一些方法可以轻松测试malloc调用创建的内存量吗?他们应该跟踪容量,但我需要测试他们是否正确这样做。

如果测试没有在段错误中结束,如果他们没有分配足够的内存以便我可以继续运行其他测试,我也会喜欢它。

谢谢!

2 个答案:

答案 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中运行学生的课程来解决您期望的问题。无论如何,这是一个好主意,因为它也可能会捕获其他不需要的问题,例如:越界访问。