제 질문은 : codeblocks의 디버그 모드로 실행중인 C 프로그램이 내 컴퓨터의 중요한 데이터를 삭제할 수 있습니까? (포인터가 가리키는 값이 아니라 포인터의 값을 변경 한 후 역 참조하는 경우와 동일)내 PC에서 코드 블록 (디버그 모드) 손상된 파일에 C에서 정의되지 않은 동작을 할 수 있습니까?
0
A
답변
5
정의되지 않은 동작은 정의되지 않습니다. 이상한 일들을 할 수 있습니다.
이론적으로, 그것은 손상 될 수 있습니다 어떤 메모리 위치. 부작용은 무시할 수있는 행동에서 파국적 인 행동까지 다양합니다.
위키 문헌의 very related을 읽으십시오.
2
전적으로 귀하의 코드가 무엇을하고 어떤 종류의 정의되지 않은 동작을 말하는지에 따라 다릅니다. 이와 같은 코드는 이론적으로 컴퓨터의 파일을 손상시킬 수 있습니다.
char* garbage; // not initialized
FILE* fp = fopen(garbage, "w");
fprintf(fp, "hello");
이론적으로는? UB 동작은 악성 코드가 실행될 수 있음을 의미합니다. 실질적으로 포인터는 하드 드라이브를 가리 키지 않습니다. 따라서 메모리 위치 (불특정 한 위치까지)에 쓰면 파일이 손상되지 않습니다. – StoryTeller
@StoryTeller 내 대답에 게시 할 의향이 있다고 생각합니까? –
@SouravGhosh - 정말. OP는 파일이 누락 될까봐 걱정합니다. 나는 파일 시스템이 프로세스의 메모리 공간 (UB 때문에 호출되고 악의적 인 코드는 파일에도 불구하고 삭제됨)과 분리되어 있다는 것을 그들에게 안심 시키려고 노력했다. – StoryTeller