#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *arr = (int*)malloc(10);
int i;
for(i=0;i<100;i++)
{
arr[i]=i;
printf("%d", arr[i]);
}
return 0;
}
위의 프로그램에서 malloc을 호출하면 10 바이트의 메모리가 할당되고 각 int 변수는 2 바이트를 차지하므로 각각 2 바이트의 int 변수 5 개를 저장할 수 있습니다. 따라서 동적으로 할당 한 총 10 바이트를 구성합니다.malloc 비 결정적 동작
하지만 for-loop를 호출하면 99 번째 색인까지 값을 입력하고이 값들을 모두 저장할 수있게되었습니다. 그래서 나는 100 개의 int 값을 저장한다면 그것은 단지 200 바이트의 메모리를 의미하지만 10 바이트 만 할당 할 수 있습니다.
그래서이 코드의 결함은 무엇입니까? 또는 malloc은 어떻게 작동합니까? 그런 식으로 malloc의 동작이 비 결정적이라면 적절한 동적 메모리 처리를 어떻게 달성 할 수 있습니까?
그러나 malloc (10)은 동적이 아닙니다. Malloc (N * sizeof (int))은 동적입니다. 10이 항상 10 인 경우 int arr [10]을 사용할 수 있습니다. –
... (거의 의미가없는) 메모리 누출을 피하십시오. – WhozCraig
아무에게도 malloc 반환 값을 전송하지 말라고 말한 적이 없습니까? – Jens