가능한 중복 : 나는 이상한 일이 일어나고 있음을 깨달았을 때 난 그냥 포인터와 함께 연주했다
Why don’t I get a segmentation fault when I write beyond the end of an array?세분화 오류가 발생하지 않는 이유는 무엇입니까?
. 나는 우리가 예를 들어, strcpy와을 사용하여 다른 문자열 DST에 됨 src 문자열 을 복사 할 때마다, 우리는 SRC에 필요한 공간을 할당해야한다고 알고 있습니다.
char *dst,*src = "asdlskafksdhfklshfkshdkfhksdhfçsahdflçsdhfçklshadfç";
dst = (char*)malloc(1); //only one char allocated
strcpy(dst,src);
printf("dst=%s.\n",dst);
이 코드는 실행하지 않아야합니다. 그러나 그것은 일어나지 않습니다. 코드가 실행되고 src을 dst에 성공적으로 복사하고 dst이라는 매력을 인쇄합니다. 누군가 왜 나 한테 설명해 줄 수 있니? 왜 이런 일이 일어나고있는거야?
정의되지 않은 동작입니다. 프로그래머가 의도 한대로 수행 될 수 있습니다. 아니. –
@DanielFischer : C를 발명 한 과학적으로 엄격한 사람들이 C 스펙에서 너무 많은 세부 사항을 제외 시켰다는 사실에 조금 실망하지 않는가? C에는 너무 많은 "정의되지 않은 동작 기능"이 있습니다! – Razvan
@Razvan : 이것은 매우 의도적입니다. – akappa