Cygwin의 gcc를 사용하여이 C 프로그램을 방금 컴파일했습니다.
#include <stdio.h>
void main (){
char *str;
gets(str);
printf("%s",str);
}
따로 설정하는 gets
것은 더 이상 사용되지 않습니다 . 이것은 str에 메모리를 할당하지 않기 때문에 중단되어야하지만 매우 긴 입력에서도 작동합니다. 예를 들어 char str [16]을 설정하면 할당 된 길이를 몇 문자 만 초과하면 중단됩니다.
세분화 오류가 발생하지 않는 이유는 무엇입니까?
초기화되지 않은 포인터가 가리키는 액세스 메모리 영역은 정의되지 않은 동작 이며 충돌이 발생할 수 있으며 정상적으로 작동하는 것처럼 보일 수 있습니다. 한마디로 그 행동을 예측할 수 없습니다.
세분화 오류가 발생하지 않는 이유는 무엇입니까?
초기화되지 않은 포인터는 결정되지 않은 값을 가지며, 실수로 쓰기 가능한 영역을 가리키면 해당 프로그램이 정상적으로 "작동"합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다