728x90
반응형
10.2 동적 할당
필요할 때 필요한 만큼만 메모리를 요청해서 사용하여 메모리를 절약할 수 있다.
사용 후 더 이상 필요가 없을 경우, 해당 영역을 반납한다ㅣ
- malloc()
- calloc()
- realloc()
- free()
malloc을 사용한 동적 메모리 할당
#include <stdlib.h>
void *malloc(size_t size);
void free(void *ptr);
malloc()은 void*타입이므로 사용시 형변환이 필수이다.
#include <stdlib.h>
void *calloc(size_t n, size_t size);
//크기가 size인 메모리 공간을 n개 할당한다. 값을 모두 0으로 초기화한다.
calloc의 경우 모든 바이트를 0으로 초기화한다.
#include <stdlib.h>
void *realloc(void *ptr,size_t newsize);
realloc
malloc을 사용한 예시 stud1.c>>
더보기
#include <stdio.h>
#include <stdlib.h>
struct student{
int id;
char name[20];
};
int main()
{
struct student *ptr;
int n,i;
printf("몇 명의 학생을 입력하시겠습니까?");
scanf("%d",&n);
if(n<=0){
fprintf(stderr,"오류: 학생 수를 잘못 입력하였습니다");
fprintf(stderr,"프로그램 종료");
exit(1);
}
ptr=(struct student*)malloc(n*sizeof(struct student));
if(ptr==NULL){
perror("malloc");
exit(2);
}
printf("%d 명의 학번과 이름을 입력하세요.\n",n);
for(i=0;i<n;i++)
scanf("%d %s\n", &ptr[i].id, ptr[i].name);
printf("\n*학생 정보(역순) *\n");
for(i=n-1;i>=0;i--)
printf("%d %s\n",ptr[i].id, ptr[i].name);
printf("\n");
exit(0);
}
(참고) C언어에서의 메모리 관리 함수
#include <string.h>
void *memset(void *s, int c, size_t n);
//s부터 n바이트만큼 바이트c로 설정하고 s를 반환
int memcmp(const void *s1, const void *s2, size_t n);
//s1과 s2의 첫 n바이트를 비교, 내용이 동일하면 0, s1이 작으면 음수 크면 양수 반환
void *memchr(const void *s,int c, size_t n);
//s가 가리키는 메모리의 n바이트 범위에서 문자c를 탐색. 찾으면 처음 발견한 바이트의 포인터 반환, 없으면 NULL
void *memmove(void *dst, const void *src, size_t n);
//dst에다가 src를 n바이트 복사하고 dst반환
void *memcpy(void *dst, const void *src, size_t n);
//dst에 src의 n바이트를 복사하고 dst반환. 두 메모리 영역은 겹쳐지지 않음
mem함수 사용예시>>
더보기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char str[32]="DO you like Linux?";
char *ptr, *p;
ptr = (char *)malloc(32);
memcpy(ptr,str,strlen(str));
puts(ptr);
memset(ptr+12,'|',1);
puts(ptr);
p=(char*)memchr(ptr,'|',18);
puts(p);
memmove(str+12,str+7,10);
puts(str);
}
728x90
반응형
'2022-2 > 시스템 프로그래밍' 카테고리의 다른 글
계정과 권한/패스워드 크래킹 (0) | 2022.11.22 |
---|---|
9장 프로세스 제어 (1) | 2022.11.16 |
8장 프로세스 (1) | 2022.11.08 |
5. 파일 시스템 (0) | 2022.11.02 |
4장 파일 입출력 (0) | 2022.10.30 |
댓글