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];
}
}
왜 이런 일이 발생합니까?
정의되지 않은 동작을 막을 수있는 방법은 없습니다. malloc과 아무런 관련이 없습니다. – EdChum
태그를 스팸하지 마십시오. 이것은 java와는 아무런 관련이 없습니다. –
C 나 C++ 모두 범위 검사를하지 않습니다. 할당 된 메모리 영역을 벗어나면 * 정의되지 않은 동작 *이 발생합니다. 이야기의 끝. 나는이 질문에 * 정확한 * 중복이 있음을 알고 있습니다. 조금만 검색하면됩니다. –