GCC中是否有任何编译器选项可以在编译时检查内存错误?

时间:2011-12-31 06:43:11

标签: c gcc

我正在编译这个程序,编译顺利。我执行它的那一刻,失败了free(): invalid pointer错误。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p = NULL;
    if ((p = (char *) malloc((int)sizeof(char) * 100)) == NULL) {
        printf("ERROR: unable to allocate memory\n");
        return -1;
    }
    p += 50;
    free(p);    
    return 0;
}

我使用gcc -o memtest m.c命令编译。

是否有任何GCC编译器选项会在编译期间发出有关这些无效指针错误的警告/错误/指示?

3 个答案:

答案 0 :(得分:5)

没有。使用Electric FenceValgrind

答案 1 :(得分:2)

答案 2 :(得分:1)

不,在编译时未检测到此类错误,因为在实践中,此类检测只会触发最简单的情况,例如您的示例。