-1

IP は 2 つの構造を持つ電卓を作成しています: -IPv4: タイプ「アドレス」の IP アドレス、IP のクラス、およびマスクが含まれます -アドレス: 4 オクテットの配列が含まれます

typedef struct Address
{
    int *Octetos;

} Address;

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

私は 2 つの関数を使用します: -ClearDireccion: 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;
}

実行すると、次のメッセージが表示されます: 「セグメントの違反 (`コア'生成)」

4

2 に答える 2

0

にアクセスする前にmalloc()、構造体ポインタが必要です。編集:そしてあまりにも。両方のポインターがあります。IPOctetosmascara

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 に答える
0

この行

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

初期化されていないように見えますが、逆参照Mascaraしています。

于 2013-05-25T09:57:47.430 に答える