IP'm制作一个计算器,他有两个结构: -IPv4:包含“地址”类型的IP地址,IP和掩码的类 -Address:包含4个八位字节的数组
typedef struct Address
{
int *Octetos;
} Address;
typedef struct IPv4
{
Address *IP;
char Clase;
Address *Mascara;
} IPv4;
我使用2个功能: -CrearDireccion:负责初始化IP地址的函数 -CrearOcteto:负责初始化IP的4个八位字节的函数
int * CrearOcteto(int num)
{
int *octe=(int *)malloc (num*sizeof(int));
octe[0]=0;
octe[1]=0;
octe[2]=0;
octe[3]=0;
return octe;
}
IPv4 * CrearDireccion(int Oct[])
{
IPv4 * instanciaDirec;
instanciaDirec=(IPv4 *)malloc(sizeof(IPv4));
instanciaDirec->IP->Octetos=CrearOcteto(4);
instanciaDirec->IP->Octetos[0]=Oct[0];
instanciaDirec->IP->Octetos[1]=Oct[1];
instanciaDirec->IP->Octetos[2]=Oct[2];
instanciaDirec->IP->Octetos[3]=Oct[3];
instanciaDirec->Mascara->Octetos=CrearOcteto(4);
instanciaDirec->Clase='N';
return instanciaDirec;
}
运行时收到以下消息: “违反段(生成'核心')”
答案 0 :(得分:0)
这一行
instanciaDirec->Mascara->Octetos=CrearOcteto(4);
取消引用Mascara
,虽然它似乎没有被初始化。
答案 1 :(得分:0)
在尝试访问malloc()
之前,您需要IP
结构指针Octetos
。编辑:还有mascara
。有两个指针。
IPv4 * CrearDireccion(int Oct[])
{
IPv4 * instanciaDirec;
instanciaDirec=(IPv4 *)malloc(sizeof(IPv4));
instanciaDirec->IP = malloc(sizeof(Address));
instanciaDirec->Mascara = malloc(sizeof(Address));
instanciaDirec->IP->Octetos=CrearOcteto(4);
instanciaDirec->IP->Octetos[0]=Oct[0];
instanciaDirec->IP->Octetos[1]=Oct[1];
instanciaDirec->IP->Octetos[2]=Oct[2];
instanciaDirec->IP->Octetos[3]=Oct[3];
instanciaDirec->Mascara->Octetos=CrearOcteto(4);
instanciaDirec->Clase='N';
return instanciaDirec;
}
在某些时候不要忘记free()
;)
我也会重新设计它,否则传递参数没有意义;
int * CrearOcteto(int num)
{
int i = 0;
int *octe=(int *)malloc (num*sizeof(int));
while (i < num) {
octe[i]=0;
i++;
}
return octe;
}