이 글을 3줄로 요약하면
· R6025는 윈도우가 망가졌다는 신호가 아니라 C 런타임이 프로그램을 스스로 끊었다는 신호입니다. 끊은 이유는 "아직 내용이 없는 함수를 호출했다"는 한 가지입니다.
· 마이크로소프트 문서도 이 오류의 가장 흔한 이유를 "앱의 버그 또는 손상된 설치"로 적고, 해결로 프로그램 복구·재설치를 먼저 안내합니다.
· 갈림길은 하나입니다. 한 프로그램에서만 뜨는가, 여러 프로그램에서 뜨는가. 아래 판별표에서 자기 증상을 찾고 그 섹션만 처리하면 됩니다.
목차
3. 원인 A · 그 프로그램의 설치가 손상됐거나 버전이 낡았다
4. 원인 B · Visual C++ 재배포 패키지가 손상되거나 꼬였다
6. 원인 D · 다른 프로그램이 끼어들어 호출 순서를 깨뜨린다
R6025는 정확히 무슨 뜻인가
프로그램이 왜 죽었는지가 아니라, 누가 죽였는지를 알려 주는 번호입니다.
화면에는 보통 Microsoft Visual C++ Runtime Library라는 제목의 작은 창이 뜨고, 그 안에 Runtime Error!, 실행 파일 경로, 그리고 R6025 - pure virtual function call 한 줄이 들어 있습니다. 확인을 누르면 프로그램은 그대로 종료됩니다.
여기서 중요한 것은 이 창을 띄운 주체가 윈도우가 아니라 그 프로그램에 들어 있는 C 런타임 라이브러리라는 점입니다. 프로그램이 스스로 "더 진행하면 안 되는 상태"임을 감지하고 자기를 끊은 것입니다.
마이크로소프트의 C 런타임 오류 R6025 문서는 이 오류를 "순수 가상 함수 호출"로 설명하고, "이 오류의 가장 일반적인 이유는 앱의 버그 또는 손상된 설치"라고 적습니다. 권장 조치도 프로그램 복구 또는 재설치 → 윈도우 업데이트 확인 → 앱의 최신 버전 확인 순서이며, 그래도 지속되면 앱 공급업체에 문의하라고 안내합니다.
순수 가상 함수는 이름만 정해 두고 실제 내용은 물려받는 쪽이 채우기로 한 함수입니다. 아직 아무도 내용을 채우지 않은 상태에서 그 함수가 호출되면, 실행할 코드가 없으므로 런타임이 즉시 프로그램을 중단시킵니다.
그래서 R6025는 실행 직후가 아니라 특정 기능을 쓰는 순간에 잘 나타납니다. 저장, 인쇄, 내보내기, 특정 메뉴 진입처럼 그 함수가 호출되는 지점이 정해져 있기 때문입니다.
| 코드 | 뜻 | 첫 조치 |
|---|---|---|
| R6025 | 순수 가상 함수 호출 | 프로그램 복구·재설치 |
| R6034 | 매니페스트 없이 C 런타임을 불렀음 | 재배포 패키지·DLL 경로 정리 |
| 0xc0000005 | 허용되지 않은 메모리 접근 | 드라이버·메모리 점검 |
| 0xc0000409 | 스택 버퍼 오버런 감지 | 프로그램 업데이트 |
윈도우 재설치부터 생각하지 않아도 됩니다
R6025는 바이러스 감염이나 윈도우 손상을 가리키는 번호가 아닙니다. 실제로는 프로그램 한 개의 설치 상태나 공용 런타임 한 벌의 문제인 경우가 대부분이라, 조치 범위가 훨씬 좁습니다.
증상으로 원인 좁히기
"몇 개의 프로그램에서 뜨는가"만 알아도 갈래가 절반으로 줄어듭니다.
아래 표에서 자기 상황과 가장 가까운 줄을 찾고, 그 줄이 가리키는 섹션부터 봅니다. 위에서부터 전부 해볼 필요가 없습니다.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 프로그램 한 개에서만, 그것도 저장·인쇄 같은 특정 기능에서만 뜬다 | 그 프로그램의 설치 손상 또는 구버전 | 원인 A → 복구·재설치 |
| 최신 버전으로 새로 깔았는데도 같은 자리에서 똑같이 뜬다 | 프로그램 자체의 코드 결함 | 원인 A → 마지막 항목 |
| 서로 관계없는 두 개 이상의 프로그램에서 같은 창이 뜬다 | Visual C++ 재배포 패키지 손상·혼재 | 원인 B → 복구 설치 |
| 재배포 패키지를 다시 깔아도 재부팅하면 바로 재발한다 | 시스템 파일 손상 | 원인 C → sfc·DISM |
| 특정 프로그램(백신·오버레이·매크로)을 켜 둔 상태에서만 재현된다 | 다른 프로그램의 개입 | 원인 D → 클린 부팅 |
| 윈도우 업데이트나 드라이버 교체 직후부터 시작됐다 | 시스템 파일 손상 또는 새 구성요소 충돌 | 원인 C → 원인 D 순서 |
"몇 개에서 뜨는가"를 먼저 확인합니다
한 개에서만 뜨면 그 프로그램의 문제일 가능성이 높고, 두 개 이상에서 뜨면 여러 프로그램이 공유하는 런타임 쪽을 봐야 합니다. 이 한 가지 확인으로 원인 A와 원인 B가 갈립니다.
원인 A그 프로그램의 설치가 손상됐거나 버전이 낡았다
한 프로그램에서만 뜬다면 이 섹션에서 끝나는 경우가 많습니다.
공식 문서가 첫 조치로 지목하는 갈래입니다. 설치 중 파일 일부가 덜 풀렸거나, 프로그램 버전이 지금 윈도우와 맞지 않을 때 특정 기능에서만 R6025가 반복됩니다.
1설정에서 그 프로그램을 복구한다
Win + I → 좌측 "앱" → "설치된 앱" → 문제 프로그램 우측 점 세 개 → "수정"을 누릅니다. 프로그램에 따라 "복구"와 "제거" 중 고르는 창이 나오면 복구를 먼저 고릅니다.
2수정 항목이 없으면 제거 후 다시 설치한다
이때 예전에 받아 둔 설치 파일을 다시 쓰지 않습니다. 그 파일 자체가 손상돼 있으면 몇 번을 다시 깔아도 같은 자리에서 같은 창이 뜹니다. 공식 홈페이지에서 새로 내려받습니다.
3프로그램과 윈도우의 업데이트를 확인한다
공식 문서는 재설치 다음 순서로 윈도우 업데이트 확인과 앱의 최신 버전 확인을 안내합니다. 같은 결함이 이미 수정된 버전이 나와 있으면 그것만으로 끝납니다.
지워도 남는 설정 폴더가 오류를 되살립니다
프로그램을 지워도 사용자 설정은 보통 %AppData% 아래에 그대로 남습니다. 재설치했는데도 같은 기능에서 똑같이 끊긴다면, 프로그램의 설정 초기화 기능을 쓰거나 해당 설정 폴더 이름을 바꿔 새 설정으로 한 번 켜 봅니다.
이 방법이 안 통하는 경우
복구·재설치를 마쳤는데 다른 프로그램에서도 같은 창이 뜬다면 이 갈래가 아닙니다. 여러 프로그램이 함께 쓰는 런타임 쪽이므로 원인 B로 넘어갑니다. 반대로 최신 버전에서도 같은 자리에서만 계속 끊긴다면 개발사 쪽 결함이므로, 이벤트 로그를 첨부해 공급업체에 문의하는 것이 다음 순서입니다.
원인 BVisual C++ 재배포 패키지가 손상되거나 꼬였다
서로 관계없는 프로그램 두 개 이상에서 같은 창이 뜰 때 봅니다.
R6025 창의 제목이 Microsoft Visual C++ Runtime Library인 이유가 여기 있습니다. C++로 만든 프로그램 상당수는 자기 안에 런타임을 넣지 않고, 시스템에 설치된 재배포 패키지를 공유해서 씁니다.
그래서 이 공용 한 벌이 손상되면 서로 아무 관계없는 프로그램들이 동시에 같은 증상을 보입니다. 다른 프로그램을 지우면서 공용 파일이 함께 지워졌을 때 흔히 나타나는 모양입니다.
1설치된 목록에서 현재 상태를 본다
Win + I → "앱" → "설치된 앱" → 검색창에 Visual C++를 입력합니다. 같은 연도 항목이 x86과 x64 두 줄로 짝을 이루고 있는지 확인합니다. 한쪽만 있으면 그 프로그램이 32비트인지 64비트인지에 따라 실행 자체가 갈립니다.
2지우지 말고 먼저 복구한다
항목 우측 점 세 개 → "수정"을 누르면 복구(Repair) 버튼이 있는 창이 뜹니다. 복구는 빠진 파일만 원래 자리에 다시 채워 넣는 동작이라, 제거 후 재설치보다 위험이 적습니다.
3복구가 실패하면 최신 버전을 다시 설치한다
마이크로소프트 공식 다운로드 페이지에서 최신 지원 버전을 받아 x86과 x64를 모두 설치하고 재부팅합니다. 64비트 윈도우라도 32비트 프로그램이 있으면 x86이 반드시 필요합니다.
옛날 연도 항목을 정리한다고 지우지 않습니다
2015부터 2022까지는 한 줄로 합쳐져 있지만, 2005·2008·2010·2012·2013 항목은 그 시절 런타임으로 만든 프로그램이 여전히 쓰고 있습니다. 목록이 지저분해 보인다고 지우면 멀쩡하던 프로그램이 다음에 안 켜집니다.
이 방법이 안 통하는 경우
복구 직후에는 되다가 재부팅하면 다시 같은 창이 뜬다면, 채워 넣은 파일이 다시 망가지는 것입니다. 이는 재배포 패키지가 아니라 그 아래 시스템 파일 쪽 문제이므로 원인 C로 넘어갑니다.
원인 C시스템 파일이 손상됐다
고쳐 놓아도 자꾸 원래대로 돌아갈 때 확인합니다.
비정상 종료, 저장장치 오류, 중단된 업데이트를 겪은 뒤에는 윈도우가 관리하는 파일 자체가 일부 깨져 있을 수 있습니다. 이 상태에서는 무엇을 다시 깔아도 원래 자리로 돌아가지 않습니다.
1시스템 파일 검사를 돌린다
시작 버튼을 우클릭해 "터미널(관리자)"로 연 다음 실행합니다. 100%까지 5~15분 걸립니다. 도중에 창을 닫지 않습니다.
2복구하지 못했다고 나오면 원본을 먼저 고친다
sfc가 복구에 쓰는 원본 저장소 자체가 깨졌을 때 필요한 명령입니다. 완료 후 sfc /scannow를 한 번 더 돌리고 재부팅합니다.
결과 문구는 세 가지로 갈립니다. "위반 사항을 발견하지 못했습니다"면 이 갈래가 아니니 원인 D로, "손상된 파일을 복구했습니다"면 재부팅 후 재현 여부를 확인하고, "복구할 수 없는 손상된 파일을 발견했습니다"면 DISM을 먼저 돌린 뒤 다시 시도합니다.
이 방법이 안 통하는 경우
검사 결과가 "위반 사항 없음"인데 오류가 그대로라면 시스템 파일은 멀쩡한 것입니다. 이때는 밖에서 끼어드는 프로그램을 찾아야 하므로 원인 D로 넘어갑니다.
원인 D다른 프로그램이 끼어들어 호출 순서를 깨뜨린다
특정 프로그램을 켜 둔 상태에서만 재현될 때 봅니다.
백신, 게임·통화 앱의 화면 오버레이, 매크로·후킹 도구는 다른 프로그램 안에 자기 코드를 끼워 넣어 동작합니다. 이 개입이 객체가 만들어지고 없어지는 순서와 어긋나면, 아직 준비되지 않은 함수가 호출되는 상황이 만들어질 수 있습니다.
범인을 추측으로 고르지 말고, 전부 끈 상태에서 시작해 하나씩 되살리는 방식으로 좁힙니다.
1마이크로소프트 것을 뺀 서비스를 모두 끈다
Win + R로 실행한 뒤 "서비스" 탭에서 "모든 Microsoft 서비스 숨기기"를 먼저 체크하고 "모두 사용 안 함"을 누릅니다. 체크를 빼먹고 누르면 윈도우 기본 서비스까지 꺼져 부팅이 이상해집니다.
2시작 프로그램도 함께 끈다
Ctrl + Shift + Esc → "시작 프로그램 앱"에서 오버레이·매크로·모니터링 도구를 사용 안 함으로 바꿉니다. 서비스만 끄고 시작 프로그램을 남겨 두면 판정이 흐려집니다.
3재부팅 후 같은 기능을 그대로 다시 해 본다
오류가 나던 그 동작(저장·인쇄·내보내기)을 똑같이 반복합니다. 재현되지 않으면 껐던 항목을 절반씩 켜고 재부팅하기를 반복해 범위를 좁힙니다. 항목이 20개라도 다섯 번이면 하나로 좁혀집니다.
클린 부팅은 해결이 아니라 진단입니다
원인을 찾았으면 msconfig의 "일반" 탭에서 "정상 시작"을 골라 원래대로 되돌립니다. 그대로 두면 백신 실시간 감시나 장치 관리 서비스가 꺼진 채로 계속 쓰게 됩니다.
이 방법이 안 통하는 경우
전부 끈 상태에서도 똑같이 재현된다면 밖에서 끼어드는 프로그램은 없습니다. 남는 것은 그 프로그램 자체의 결함이므로, 다음 섹션에서 얻은 모듈 이름과 예외 코드를 첨부해 개발사에 문의하는 것이 마지막 순서입니다.
어느 프로그램의 어느 모듈이 끊었는지 확인하는 법
추측 대신 기록을 봅니다. 원인 A와 B를 가르는 결정적 단서가 여기 있습니다.
R6025 창에는 실행 파일 경로만 나오지만, 이벤트 기록에는 실제로 문제를 낸 모듈 이름까지 남습니다. 그 이름이 무엇이냐에 따라 봐야 할 섹션이 정해집니다.
1응용 프로그램 로그를 연다
Win + R로 실행한 뒤 좌측에서 "Windows 로그" → "응용 프로그램"을 고르고, 오류가 났던 시각과 같은 줄의 빨간 오류 항목을 클릭합니다.
2아래 미리보기의 세 줄을 읽는다
"일반" 탭에서 오류가 발생한 응용 프로그램 이름, 오류가 발생한 모듈 이름, 예외 코드 세 줄을 확인합니다. 이 세 줄이 이 오류의 실제 신원입니다.
3모듈 이름으로 갈래를 정한다
이름이 msvcr·msvcp·vcruntime으로 시작하면 공용 런타임이므로 원인 B, 프로그램 설치 폴더 안의 파일이면 원인 A, 백신·오버레이·입력 도구의 파일이면 원인 D입니다.
R6025라는 글자가 로그에 없을 수도 있습니다
R6025는 런타임이 띄운 대화상자라 종료 코드로만 남는 경우가 있습니다. 코드로 검색하지 말고 오류가 난 시각으로 맞춰 그 무렵의 "Application Error" 또는 ".NET Runtime" 항목을 봅니다.
자주 묻는 질문
본문에서 다루지 않은 갈래를 짧게 정리했습니다.
Q.R6025는 제 컴퓨터가 고장난 신호인가요?
A.아닙니다. 공식 문서도 가장 흔한 이유를 앱의 버그 또는 손상된 설치로 적습니다. 하드웨어 고장 신호가 아니므로 부품 교체나 윈도우 재설치를 먼저 고려할 이유가 없습니다.
Q.R6025와 R6034는 같은 오류인가요?
A.같은 C 런타임 창을 쓰지만 다른 번호입니다. R6025는 아직 내용이 없는 함수를 호출한 경우이고, R6034는 매니페스트 없이 C 런타임을 불러온 경우입니다. 첫 조치도 각각 프로그램 복구와 런타임·DLL 경로 정리로 갈립니다.
Q.게임에서 떠도 같은 순서로 봅니까?
A.구조는 같습니다. 다만 게임은 게임 폴더 안에 런타임 설치 파일을 함께 넣어 두는 경우가 많고, 오버레이 프로그램의 개입도 잦습니다. 원인 B와 원인 D를 함께 봅니다.
Q.재배포 패키지를 전부 지우고 다시 깔아도 되나요?
A.권하지 않습니다. 옛 연도 항목은 그 시절 프로그램들이 아직 쓰고 있어서, 지우면 멀쩡하던 프로그램이 다음 실행에서 열리지 않습니다. 먼저 "수정 → 복구"를 쓰고, 최신 버전만 새로 덮어 설치하는 순서가 안전합니다.
Q.여기까지 다 해도 그대로면 무엇이 남나요?
A.프로그램 자체의 코드 결함입니다. 사용자 쪽에서 고칠 수 있는 범위를 넘어서므로, 이벤트 뷰어에서 확인한 응용 프로그램 이름·모듈 이름·예외 코드와 재현 절차를 정리해 개발사에 전달하는 것이 실제로 가장 빠른 길입니다.
함께 보면 좋은 글
같은 화면에서 자주 함께 나오는 다른 종료 오류들입니다.
0xc0000005 액세스 위반 오류 해결 순서 프로그램이 죽는 시점은 비슷하지만 원인이 메모리 접근 쪽인 갈래입니다 · 눌러서 확인하기 → 지정된 모듈을 찾을 수 없습니다(오류 126), 원인 4가지와 각각의 해결법 모듈 이름까지 확인했는데 그 파일이 아예 없을 때 봅니다 · 눌러서 확인하기 → VCRUNTIME140.dll·MSVCP140.dll 없음 오류 해결법 원인 B에서 다룬 재배포 패키지가 아예 빠져 있을 때의 갈래입니다 · 눌러서 확인하기 →참고 문서 · Microsoft Learn — C 런타임 오류 R6025




