소스 코드에서 변수나 배열을 만들 때, 프로그램을 실행하는 순간 사용할 메모리 양 고려 메모리에 주소가 할당된 경우일반적으로 정적 메모리그것은 말한다. 하지만 프로그램 실행 중 메모리 할당필요할때가 있습니다 동적 메모리 과제그것은 말한다.
그렇다면 동적 메모리를 사용하는 이유는 무엇입니까? 정적 메모리프로그램을 실행하기 전에 인코딩된 크기만큼 할당됩니다. 그런 실행 중에는 크기를 변경할 수 없습니다.따라서 사이즈 변경을 위해서는 개별적으로 코드변경이 필요하며, 메모리로 인한 비효율적. 그래서 동적 메모리프로그램이 실행되는 동안에도 사용자가 사용할 배열의 크기만큼 지정그래서 스토리지를 보다 효율적으로 사용할 수 있습니다..
동적 메모리 할당 – 1차원 배열 생성
이제 동적 메모리를 통해 배열을 생성하는 구조를 살펴보겠습니다.
| #포함하다 무효 메인() { |
malloc 함수~이다 메모리를 동적으로 할당하는 데 사용() 안의 작은 숫자의 바이트 크기만큼 메모리를 할당해주는 기능으로, 반환 시작 주소는 함수이므로 시작 주소를 저장할 포인터를 만들고 포인터에 주소를 저장합니다.
무료 영장프로그램이 끝날 때 동적으로 할당된 메모리 해제이를 수행하는 데 사용되는 명령입니다. free 명령을 사용하는 이유는 동적으로 생성된 변수와 배열이 자동으로 회수되지 않기 때문입니다.
가변 영역에는 세 영역이 있습니다. 함수가 호출되어 종료될 때까지 사용하다 스택 영역 변수(로컬변수, 파라미터), 프로그램이 시작하고 끝날 때까지 사용하다 데이터 범위 변수(전역 변수), 필요에 따라 생성하다 힙 공간 변수이 동적으로 할당된 변수는 힙 영역 변수에 속하는데, 힙 영역 변수의 유효 수명은 고정되어 있지 않으므로 저장 공간(메모리)을 재활용하기 위해서는 유효 수명을 결정해야 합니다.
#include<stdio.h>
#include<stdlib.h>
void main() {
int* pa;
int sum = 0, i, j;
float avg;
printf("입력할 정수의 개수:");
scanf_s("%d", &j, sizeof(int));
pa = (int*)malloc(sizeof(int) * j);
for (i = 0; i < j; i++) {
printf("%d번째 정수입력:", i + 1);
scanf_s("%d", &pa(i), sizeof(int));
sum = sum + pa(i);
}
free(pa);
avg = sum / (float)j;
printf("sum:%d\n", sum);
printf("avg=%5.3f\n", avg);
}

위의 코드는 동적으로 할당된 메모리를 사용하는 예입니다. malloc 함수를 보면 할당할 메모리의 크기로 “sizeof(int)*j”라고 쓰여 있다. 그건 할당할 공간은 입력할 정수의 수와 같습니다.무엇입니까 입력 가능한 정수 변수의 개수를 생성하려면오전.
또한 유형 변환은 “(int*)”로 작성됩니다. malloc 함수의 결과는 void 포인터입니다.(void *)이므로, 목적에 맞는 포인터 타입으로 변환즉, 정수 포인터에 저장하기 위해 결과를 정수 유형으로 변환해야 합니다.