基于GNU99的C语言标准:
free(NULL)程序不做任何事,直接返回。
操作NULL指向的数据将会导致程序崩溃。
测试代码如下:
#include <stdio.h>
#include <stdlib.h>
struct test
{
int x;
};
typedef struct test * ptr;
int main(int argc, const char * argv[])
{
ptr p = NULL;
free(p);
printf("free NULL\n");
printf("handle null %d", p->x);
return 0;
}
运行结果:
补充:关于GNU99和C99
C99 is simply the version of the C standard as of 1999 as we all know it. C99是1999年版本的C标准,因为我们都知道它。 In GCC it is not fully supported.在GCC,它是不完全支持。
GNU99 is an extension to C99, just like GNU98 is an extension of C98. GNU99是一个扩展,就像GNU98是一个扩展的C98到C99。 From the docs:从文档:
ISO C99 plus GNU extensions. ISO C99再加上GNU扩展。 When ISO C99 is fully implemented in GCC, this will become the default.当ISO C99全面实施GCC,这将成为默认设置。 The name gnu9x is deprecated.系统的的名称gnu9x是过时了。
Clang supports these extensions also.铛也支持这些扩展。