Как я могу решить свою проблему в приведенном ниже коде
#include <iostream> using namespace std; typedef struct node{ public: struct node *column; bool flag; struct node *row; int ii,jj; union{ int val; struct node *next; }u; }nod,*ptr; static ptr strt1; static ptr strt2; static ptr y; int t; int tt; void AddLink(int i,int j){ int count = 0; ptr q = strt2; ptr p = strt1; for (int k=0;k<i;k++){ q = q->u.next; } for (int k=0;k<j;k++){ p = p->u.next; } if (q->column==NULL && p->row==NULL){ ptr m = (node *)malloc(sizeof(node)); q->column = m; m->u.val = 1; m->column = q; m->ii = i; m->flag = false; p->row = m; m->row = p; m->jj= j; count =1; } if (q->column!=NULL && p->row ==NULL){ ptr h=q; ptr w = q; q = q->column; while (q->jj<j&&q!=w){ h =q; q = q->column; } ptr mm = (node *)malloc(sizeof(node)); h->column = mm; mm->column = q; mm->ii = i; mm->u.val = 1; mm->flag = false; mm->jj = j; mm->row = p; count = 1; p->row = mm; } if (p->row!=NULL && q->column==NULL){ ptr hh=p; ptr ww = p; p = p->row; while (p->ii<i&&p!=ww){ hh =p; p = p->row; } ptr mmm = (node *)malloc(sizeof(node)); hh->row = mmm; mmm->row = p; mmm->jj = j; mmm->u.val = 1; mmm->flag = false; mmm->ii = i; mmm->column = q; count = 1; q->column = mmm; } if (p->row!=NULL && q->column!=NULL && count==0){ ptr hhh = p; ptr www = p; ptr g = q; ptr gg = q; q = q->column; p = p->row; while (q->jj<j&&q!=gg){ g =q; q = q->column; } while ((p->ii)<i&&p!=www){ hhh =p; p = p->row; } if (q->jj!=j && p->ii!=i){ ptr mmmm = (node *)malloc(sizeof(node)); hhh->row = mmmm; mmmm->row = p; g->column = mmmm; mmmm->column = q; mmmm->flag = false; mmmm->u.val = 1; mmmm->ii = i; mmmm->jj = j; } else{ p->u.val +=1; } } } void DeleteLink(int i,int j){ ptr q = strt2; ptr p = strt1; for (int k=0;k<i;k++){ q = q->u.next; } ptr w =q; ptr g = q; q = q->column; while (g->jj<j&&q!=w){ q = g->column; if (q->jj==j){ q->u.val-=1; } g=q; } } int RetrieveValue(int i,int j){ ptr q = strt2; ptr p = strt1; int c = 0; for (int k=0;k<i;k++){ q = q->u.next; } ptr w =q; ptr g = q; q = q->column; while (g->jj<j&&q!=w){ q = g->column; if (q->jj==j){ c = q->u.val; } g=q; } return c; } int RetrieveRowSumUptoKthColumn(int i,int j){ ptr p = strt1; int c=0; for (int k=0;k<i;k++){ p = p->u.next; } ptr w = p; p = p->row; while (p->ii<=j&&p!=w){ c+=p->u.val; p = p->row; } return c; } int RetrieveColumnSumUptoKthRow(int i,int j){ ptr q=strt2; int c=0; for (int k=0;k<i;k++){ q= q->u.next; } ptr w = q; q = q->column; while (q->jj<=j &&q!=w){ c+=q->u.val; q = q->column; } return c; } int m; int n; ptr a; ptr b; int main(){ a = (node *)malloc(sizeof(node)); b = (node *)malloc(sizeof(node)); strt1 = a; strt2 = b; cout<<a->u.next; cout<<a->column; cout<<a->row; for(int i=0;i<10000000;i++){ ptr ar =(node *) malloc(sizeof(node)); ar->flag = true; ar->jj = i; a->u.next = ar; a = a->u.next; } a->u.next = strt1; for(int i=0;i<10000000;i++){ ptr br =(node *) malloc(sizeof(node)); br->ii = i; br->flag = true; b->u.next = br; b = b->u.next; } b->u.next = strt2; int e; int cc; cin>>cc; for(int i=0;i<cc;i++){ cin>>e; cin>>m; cin>>n; if (e==1) AddLink(m,n); if (e==2) DeleteLink(m,n); if (e==3) cout<<RetrieveValue(m,n)<<endl; if (e==4) cout<<RetrieveRowSumUptoKthColumn(m,n)<<endl; if (e==5) cout<<RetrieveColumnSumUptoKthRow(m,n)<<endl; } }
Что я уже пробовал:
Здесь я получаю ошибку сегментации при выполнении кода.Пожалуйста, решите эту проблему, то есть скажите мне точно, где эта проблема возникает.