veritas574   3년 전

런타임에러가 발생할 수 있는 사유들인 arry의 범위를 넘어서거나, 

잘못된 메모리 access 등 아무리 찾아보아도 어디가 문제인지를 못찾겠어서 문의를 드립니다. ㅠㅠ  

rnjstpgns91   3년 전

35번째 줄에서 break를 걸면 25번째 줄에 있는 바깥 반복문은 끝나지 않습니다. 

반례를 찾아보진 않았지만 전체에서 두 거짓말쟁이들의 키를 뺀 값이 100이 되는 여러 조합이 있을 때

계속 erase를 해주는데 반복문에 index는 계속 커져가니 범위를 넘어간 값을 참조할 때 런타임에러가 발생하는 것으로 예상됩니다.

flag를 통해 break를 한번 더 해주어서 탈출해주시거나(제출하니 통과 확인 됐습니다), 조건문에서 정렬 하고 출력까지 한뒤에 exit로 그냥 종료하는 방법도 좋을 것 같습니다.

veritas574   3년 전

자문자답이 되어버렸는데, 35번째 줄의 if문에서의 break; 대신 
flag 변수를 하나 넣고 if문을 만족시킬 때 flag = 1로 변경 후, for loop에서 flag==1 인 경우 break; 처리하니 문제가 해결되었습니다.

정확한 원인은 잘 알 수 없지만 현상적으로만 봤을 때, // 이 부분은 혹시 고수님이 보시게되면 comment 주시면 좋을 것 같습니다 ^^
for loop에 대한 break 처리를 명확하게 하지 않고 for loop안에 들어가 있는 if문에서만 break; 처리해서 발생하는 segfault였습니다.

혹시나 같은 원인으로 문제를 겪는 분들이 있으실 수도 있어 공유차 남겨둡니다.

veritas574   3년 전

@rnjstpgns91님 감사합니다. 댓글 남긴 2분 후에 바로 답변을 주셨네요.
말씀하신대로 100이 되는 조합이 꼭 하나라는 보장이 없기 때문에다른 조합으로 인해 계속 erase가 발생하게 되면 문제가 발생하네요.

flag처리 후 for loop을 탈출하는 형태로 마무리지었습니다. 답변 감사드립니다.

댓글을 작성하려면 로그인해야 합니다.