ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1019. Перекрашивание прямой

Why my program get "access violation"
Послано NOL 4 окт 2002 12:09
I think my program is correct but why it get crash access violation
This is my program. Thanks in advance.

#include <stdio.h>
#include <stdlib.h>

struct Node{long A;Node *next;Node *prev;};

int main()
{
    int n,i,W,nW;
    long x,y,max=0,maxa,maxb;
    char s[10];
    Node *home,*now,*T;
    home=(Node *)malloc(sizeof(Node));
    home->next=(Node *)malloc(sizeof(Node));
    home->prev=NULL;
    home->A=0;
    home->next->A=1000000000;
    home->next->next=NULL;
    home->next->prev=home;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%ld%ld%s",&x,&y,&s);
        if(x==y) continue;
        nW=(s[0]=='w');
        for(now=home,W=0;now!
=NULL;now=now->next,W=!W)
            if(now->A>=x)
            {
                if
(nW==W)
                {

    if(y<=now->A) break;

    T=now->prev;
                }
                else
                {

    if(now->A>y)

    {

        T=now->prev;

        now->prev=(Node *)malloc(sizeof
(Node));

        T->next=(Node *)malloc(sizeof(Node));

        now->prev->next=now;

        T->next->prev=T;

        now->prev->prev=T->next;

        T->next->next=now->prev;

        now->prev->A=y;

        T->next->A=x;

        break;

    }

    now->A=x;

    T=now;
                }
                for
(now=now->next,W=!W;now!=NULL;now=now->next,W=!W)
                {

    if(now->A>y)

    {

        if(W==nW)

        {

            now->prev=T;

            T->next=now;

        }

        else

        {

            now->prev->A=y;

            now->prev->prev=T;

            T->next=now->prev;

        }

        break;

    }

    else

        if(now->A==y)

        {

            if(W!=nW) now=now-
>next;

            now->prev=T;

            T->next=now;

            break;

        }
                }
                break;
            }
    }
    for(now=home->next,W=1;now!=NULL;now=now-
>next,W=!W)
        if(W && (((now->A)-(now->prev->A))
>max))
        {
            max=(now->A)-(now-
>prev->A);
            maxa=now->prev->A;
            maxb=now->A;
        }
    printf("%ld %ld\n",maxa,maxb);
    return 0;
}