백년전쟁문제 probably assertion fail이 뜹니다 sjc1117 probably assertion fail이 뜨네요 찾아보니 realloc에서 뜹니다. 비쥬얼스튜디오에서는 문제없이 돌아가는데 왜 이런거죠 #include <stdio.h> #include <string.h> #include <stdlib.h> #define FRANCE 1 #define ENGLAND 2 typedef struct _gui{ short id; short contry; struct _gui** sub; bool revolt; int subcnt; _gui(short _id){ id = _id; revolt = false; sub = (struct _gui**)malloc(sizeof(struct _gui*)*1); if(id==1) contry=FRANCE; if(id==2) contry=ENGLAND; subcnt=0; } void setSub(struct _gui* _sub){ sub[0] = _sub; sub[0]->contry = contry; realloc(sub, sizeof(struct _gui*) * (++subcnt)); } void ChangeContry(int _contry){ contry = _contry; if(subcnt > 0 ){ for(int i=0; i<subcnt; i++){ if(!(sub[i]->revolt)){ sub[i]->ChangeContry(contry); }else if(sub[i]->revolt){ sub[i]->ChangeContry(contry == FRANCE ? ENGLAND : FRANCE); } } } } void Uprising(){ if(revolt){ revolt = false; }else{ revolt = true; } ChangeContry(contry == FRANCE ? ENGLAND : FRANCE); } }gui; int main() { int input; char A[50001][6]; gui* G[50001]; int Gnum, QTnum; int G1, G2; char QT; int cnt=0; scanf("%d", &input); for(int i=0; i<input; i++){ cnt=0; scanf("%d %d", &Gnum, &QTnum); for(int j=1; j<=Gnum; j++){ G[j] = new gui(j); } for(int j=0; j<Gnum-2; j++){ scanf("%d %d%*c", &G1, &G2); G[G1]->setSub(G[G2]); } for(int j=0; j<QTnum; j++){ scanf("%c ", &QT); if(QT=='Q'){ scanf("%d %d%*c", &G1, &G2); if(G[G1]->contry == G[G2]->contry) strcpy(A[cnt++], "Ally"); else strcpy(A[cnt++], "Enemy"); }else if(QT=='T'){ scanf("%d%*c", &G1); G[G1]->Uprising(); } } for(int k=0; k<cnt; k++){ printf("%s\n", A[k]); } } for(int j=1; j<= Gnum; j++){ delete G[j]; } return 0; } 10년 전
5개의 댓글이 있습니다. VOCList 1 5 1 1 3 3 4 3 5 T 3 죽네요 10년 전 link sjc1117 네 setSub부분에 sub[0]으로 해놓아서 죽을겁니다. sub[subcnt]로 바꾸면 제대로 동작하구요 테스트한다고 저렇게 바꿧는데 제가 원래대로 안하고 올렸네요 10년 전 link VOCList 50000, 50000 랜덤케이스에서 여전히 그냥 죽네요. 10년 전 link VOCList realloc 사용법이 잘못됐고, realloc 시 재배정하는 사이즈도 의도했던 것 보다 1 작아보입니다. 그와는 별도로 id를 short로 받으면 5만개짜리 데이터에선 오버플로우가 나겠죠. 코드 제일 마지막에 delete 하는 부분도 의도하신 위치에서 돌아가지 않아보이네요.. 10년 전 link sjc1117 우와 감사합니다 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
sjc1117
probably assertion fail이 뜨네요 찾아보니 realloc에서 뜹니다.
비쥬얼스튜디오에서는 문제없이 돌아가는데 왜 이런거죠
10년 전