아래 코드에서 malloc의 매개 변수를 어떤 값 (적어도 내가 시도한 값)으로 변경할 수 있으며 모든 것이 괜찮아 보입니다.
예를 들어 "3 * sizeof (float)"를 "3 * sizeof (char)"또는 0으로 변경할 수 있습니다. 그리고 여전히 "올바른"결과를 얻을 수 있습니다. 힙 크기는 전혀 중요하지 않은 것 같습니다.
이것은 정말 나를 혼란스럽게합니다. 어떻게 이런 일이 일어날 수 있습니까?
코드는 Xcode 5에서 작성되고 실행됩니다.
float *favorites = malloc(3 * sizeof(float));
favorites[0] = 3.14158;
favorites[1] = 2.71828;
favorites[2] = 1.41421;
for (int i = 0; i < 3; i++) {
printf("%.4f is favorite %d\n", favorites[i], i);
}
free(favorites);
favorites = NULL;
그렇게하면 프로그램이 정의되지 않은 동작을 호출하기 때문 입니다. UB가 호출되면 모든 베팅이 해제됩니다. 예상하거나 예상치 못한 결과를 얻을 수 있습니다.
이제 메모리를 할당하지 않고 favoritee
float *favorites ;
...
무슨 일이 일어나는지 보시죠?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다