-1

IP 正在制作一个计算器,其中包含两个结构: -IPv4:包含“地址”类型的 IP 地址、IP 类和掩码 -地址:包含 4 个八位字节的数组

typedef struct Address
{
    int *Octetos;

} Address;

typedef struct IPv4
{
    Address *IP;
    char Clase;
    Address *Mascara;
} IPv4;

我使用 2 个函数: -CearDireccion:负责初始化 IP 地址的函数 -CearOcteto:负责初始化 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;
}

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

4

2 回答 2

0

这条线

instanciaDirec->Mascara->Octetos=CrearOcteto(4);

正在取消引用Mascara,尽管它似乎没有被初始化。

于 2013-05-25T09:57:47.430 回答
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;
}
于 2013-05-25T09:58:57.253 回答