2017-04-07 1 views
-8

I는 malloc(1)을 사용하여 메모리를 할당하는데, 즉 1 바이트를 할당하지만 1 바이트보다 많은 수를 허용합니다. 여기이 코드에서 1000을 허용하고 1 바이트에이 숫자를 저장할 수 없습니다. 코드 :Malloc() 함수가 실제보다 많은 바이트를 할당 한 이유는 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 
#include<iostream> 
using namespace std; 
int main() 
{ 
    int *a; 
    a=(int *)malloc(1); 
    for(int i=0;i<1000;i++) 
    { 
     a[i]=i; 
    } 
    for(int i=0;i<1000;i++) 
    { 
     cout<<""<<a[i]; 
    } 
} 

왜 이런 일이 발생합니까?

+2

정의되지 않은 동작을 막을 수있는 방법은 없습니다. malloc과 아무런 관련이 없습니다. – EdChum

+8

태그를 스팸하지 마십시오. 이것은 java와는 아무런 관련이 없습니다. –

+0

C 나 C++ 모두 범위 검사를하지 않습니다. 할당 된 메모리 영역을 벗어나면 * 정의되지 않은 동작 *이 발생합니다. 이야기의 끝. 나는이 질문에 * 정확한 * 중복이 있음을 알고 있습니다. 조금만 검색하면됩니다. –

답변

2

CC++은 배열과 관련하여 실제로 경계 검사를하지 않기 때문에 정의되지 않은 동작입니다.

0

배열에는 경계 검사 조건이 없습니다. OS 또는 프레임 워크가 효율적이면 분할 오류가 발생합니다.

+0

댓글이 있어야합니다. –

관련 문제