不要在Struct中初始化整数数组

时间:2013-05-25 09:52:25

标签: c data-structures

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;
}

运行时收到以下消息: “违反段(生成'核心')”

2 个答案:

答案 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;
}