我正在编译这个程序,编译顺利。我执行它的那一刻,失败了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
编译器选项会在编译期间发出有关这些无效指针错误的警告/错误/指示?
答案 0 :(得分:5)
没有。使用Electric Fence或Valgrind。
答案 1 :(得分:2)
编译时间否,运行时 - 是:http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
编译时最接近的是:http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html
答案 2 :(得分:1)
不,在编译时未检测到此类错误,因为在实践中,此类检测只会触发最简单的情况,例如您的示例。