KAIST

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ KAIST ] in KIDS
글 쓴 이(By): pictor (gaugefield)
날 짜 (Date): 2001년 4월  4일 수요일 오후 02시 19분 17초
제 목(Title): Re: [Q] C에서 realloc에 관한 문제


저 같으면 다음과 같이 할 것 같은데...

CHREQ_PACKET이랑
CHACK_PACKET의 이름을

CH_REQ랑 CH_ACK으로 바꾸었음.
왜냐하면
어차피 packet들이라는 것을 아는 이상
CHREQ_PACKET처럼 PACKET이라는 꼬리표를 달고 다닐 필요가 없다는 것 때문임.


++


struct CH_REQ **chreq;
struct CH_ACK **chack;

struct CH_REQ *
CH_REQ_new(int source, int dest)
{
        struct CH_REQ *p;

        p = malloc(sizeof(*p));
        if (p == NULL)
                return NULL;

        p->from_node = source;

        p->seq_num = rand();
        p->s_id = source;
        p->d_id = dest;
        p->hop_cnt = 0;
        p->route_list[0] = source;

        for (i = 1; i<HOP_CNT_LIMIT; i++)
                p->route_list[i] = MAX_NUM;
        for (i = 0; i<SLOT_SIZE; i++)
                p->free_slot_list[i] = node[source].data[i].free;

        node[source].req_transmitted += 1;

        return p;
}

int        chreq_alloced;

#define ALLOCED_UNIT        100
        
void
chreq_check(int m)
{
        int        size;

        if (m != chreq_alloced)
                return;

        chreq_alloced += ALLOCED_UNIT; // size가 100개씩 늘어난다.
        size = chreq_alloced * sizeof(struct CH_REQ *);

        if (chreq == NULL)
                chreq = malloc(size);
        else
                chreq = remalloc(chreq, size);
}


if ((double)t >= call_arr)
{
        chreq_check(m);
        chreq[m] = CH_REQ_new(s, d);
        m_prev = m;
        m++;

        call_arr += exp_dist(820.);   // another call_arrival

} //if

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.