프로그래밍

 3198, 1/160 회원가입  로그인  
   gxcolin
   C언어 프로그래밍 도와주세요 ㅠㅠㅠ

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6460 [복사]


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

typedef struct ListNode
{
        int row;
        int col;
        int value;
        struct ListNode *link;
} ListNode;
typedef struct ListHeader
{
        int length;
        ListNode *head;
        ListNode *tail;
} ListHeader;

void init (ListHeader *plist)
        {
                plist -> length = 0;
                plist -> head = NULL;
                plist -> tail = NULL;
        }
        void insert_node_last(ListHeader *plist, int row, int col, int value)
                
        {

                ListNode *temp = (ListNode *)malloc(sizeof(ListNode));
                if(temp==NULL) fprintf(stderr,"메모리 할당 에러\n");
                temp->row=row;
                temp->col=col;
                temp->value=value;
                temp->link = NULL;
                if(plist->tail=NULL)
                        {
                                plist->head=plist->tail=temp;
                        }
                        else
                        {
                                plist->tail->link = temp;
                                plist->tail=temp;
                        }
                                plist->length++;
                }
                
                void sparse_matrix_add2(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3, int n2)
                {
                        ListNode *a = plist1->head;
                        ListNode *b = plist2->head;
                        int sum;
                        while(a->link!=NULL && b->link!=NULL)
                        {
                                int inda = (a->row)*n2 + a->col;
                            int indb = (b->row)*n2 + b->col;
                                if(inda<indb)
                                {
                                        insert_node_last(plist3,a->row,a->col,a->value);
                                        a=a->link;
                                }

                                else if(inda == indb)
                                {
                                sum = a->value + b->value;
                                     if(sum!=0)
                                                 {
                                                         insert_node_last(plist3,a->row,a->col,sum);
                                                 a=a->link, b=b->link;
                                             }
                                         else a=a->link,b=b->link;
                                }
                                
                                else if(inda>indb)
                                {
                                        insert_node_last(plist3,b->row,b->col,b->value);
                                        b=b->link;
                                }}
                        for(;a!=NULL;a=a->link)
                                insert_node_last(plist3,a->row,a->col,a->value);
                        for(;b!=NULL;b=b->link)
                                insert_node_last(plist3,b->row,b->col,b->value);
                }

                void sparse_matrix_print(ListHeader *plist)
                {
                        ListNode *p=plist->head;
                        for(;p;p=p->link)
                                printf(" %d %d %d\n",p->row,p->col,p->value);
                }
                void main()
                {
                        ListHeader list1,list2,list3;
                        int row=0,col=0,value=0;
                        int n1=0,n2=0,n3=0;
                        int m1=0,m2=0,m3=0;
                        int s=0;

            FILE *fp=NULL, *fs=NULL;
                        

                        init(&list1);
                        init(&list2);
                        init(&list3);

                                fp=fopen("input.txt","rt");
                                if(fp==NULL)
                                {
                                        printf("input.txt 파일오픈불가 \n");
                                        fclose(fp);
                                        return;
                                }
                                else
                                {
                                fscanf(fp,"%d %d %d",&n1,&n2,&n3);
                                while(1)
                                {
                                        if(fscanf(fp,"%d %d %d", &row,&col,&value) != (n1,n2,value))
                                        insert_node_last(&list1, row, col, value);
                                        
                                        else
                                                {
                                                        m1=row, m2=col;
                                                        break;
                                            }
                                }
                                        //fscanf(fp,"%d %d %d",&m1,&m2,&m3);
                                        //if(m1==n1 && m2==n2)
                                                //break;
                
                                while(1)
                                {
                                        if(fscanf(fp,"%d %d %d", &row, &col, &value)!=EOF)
                                                insert_node_last(&list2,row,col,value);
                                        else break;
                                }
                                
                                sparse_matrix_print(&list1);
                                sparse_matrix_print(&list2);
                                }}




안녕하세요
C언어로 row랑 column이랑 value로 구성된 Sparse Matrix를 Linked List로 구현해서 덧셈연산하는 프로그램을 짜고 있는데요.
새로운 node 추가하는 함수랑 덧셈연산하는 함수를 정의하고 아래와 같은 내용의 input.txt에서 두 sparse matrix를 받아서 덧셈연산 해서 output.txt에 출력하게 하려는 프로그램인데요
그 중에서 input.txt에서 fscanf로 값을 받아 엔터 기준 윗부분은 list1에 노드를 계속 추가하고 아랫부분은 list2에 추가하는 소스만 올려봤습니다.
그리고 소스 맨 밑 부분 sparse_matrix_print(&list1)이랑 2는 메모장에서 잘 불러와서 잘 저장했는지 확인하는 함수고요.

컴파일은 되는데 디버그하니까 자꾸 이런 오류가 뜨네요

main.c.exe의 0x00c01504에 처리되지 않은 예외가 있습니다. 0xC0000005: 0x0000000c 위치를 기록하는 동안 액세스 위반이 발생했습니다.

그리고 아래쪽 지역(?)을 보니 pllist의 head의 row랑 col이랑 value, link에
CXX0030 오류 :  식을 계산할 수 없습니다. 이런 것도 보이고요.

아 진짜 돌겠네요 뭐가 틀렸는지 감이 안잡히니까 뭘 어떻게 방향을 잡아야 할 지 모르겠습니다. 살려주세요


input.txt
2 3 3
0 0 2
0 2 1
1 2 3

2 3 4
0 0 1
0 1 1
0 2 2
1 1 2

output.txt
Addition
2 3 5
0 0 3
0 1 1
0 2 3
1 1 2
1 2 3




  Hit : 8652     Date : 2014/05/17 11:05



    
MainThread Insert 함수 내에서 if문 보시면 plist->tail == NULL 바꾸시고 나머지 계속 코딩해보세요
From MainThread
2014/05/18  
gxcolin 와 감사합니다!! 저게 그렇게 안보입디다 ㅠㅠ 2014/05/19