C语言中声明指针的时候最好指定指针初始值,这样的习惯可以避免指针泄漏错误;如下例子
#include <stdio.h>
include <stdlib.h>
struct in_addr{
int s_addr;
char end;
};
struct in_addr *ipaddr;
int main()
{
ipaddr->s_addr = 1;
printf("%d\n", ipaddr->s_addr);
return 0;
}
这里报错内存泄漏, 问题在于只是定义了一个指针,并没有定义一个struct in_addr结构;应该改为
struct in_addr *ipaddr = malloc(sizeof(struct in_addr));
但是此时会出现错误“initializer element is not constant”,这是因为C语言初始化一个全局变量或是static变量的时候,只能使用常量赋值,不能使用变量赋值。动态内存分配得到的指针也不能赋值给全局变量或是static变量;应该将ipaddr指针变量定义在函数内部;