## 프로젝트 개요
실시간 데이터 처리 시나리오에서 메모리 누수를 방지하고 유연한 크기 조절이 필요한 동적 버퍼 관리를 구현합니다. 사용자 입력에 따라 버퍼 크기를 자동 조정하며, 메모리 누수 방지를 위한 정확한 할당/해제 처리를 핵심으로 합니다.
## 주요 기능
- 실시간 데이터 입력 시 버퍼 동적 확장
- 최대 메모리 한도 설정 및 경고 시스템
- 오류 발생 시 자동 복구 모드 진입
- 사용자 친화적인 메모리 사용량 표시
## 사용 방법
1. 프로그램 실행 후 'i' 입력으로 데이터 입력
2. 'q' 입력으로 종료 및 메모리 해제
3. 'm' 입력으로 현재 할당된 메모리 크기 확인
4. 오류 발생 시 자동 복구 모드 진입
## 확장 가능성
- 스레드 안전성 추가
- 메모리 사용량 로깅 기능 구현
- 여러 버퍼 동시 관리 시스템 확장
⚡ 동적 버퍼 관리 시스템
C 예제
중급
난이도
예제
타입
11/01
등록일
동적 버퍼 관리 시스템
중급태그
코드 예제
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BUFFER_SIZE 1024 * 1024 // 최대 메모리 한도 (1MB)
#define ERROR_MESSAGE "메모리 할당 실패: 프로그램 종료"
typedef struct {
char* buffer;
size_t capacity;
size_t used_size;
} DynamicBuffer;
// 버퍼 초기화 함수
DynamicBuffer init_buffer(size_t initial_size) {
DynamicBuffer db = {
.buffer = (char*)malloc(initial_size),
.capacity = initial_size,
.used_size = 0
};
if (!db.buffer) {
fprintf(stderr, "[%s] %s
", __func__, ERROR_MESSAGE);
exit(EXIT_FAILURE);
}
return db;
}
// 버퍼 확장 함수
void resize_buffer(DynamicBuffer* db, size_t new_size) {
if (new_size > MAX_BUFFER_SIZE) {
fprintf(stderr, "[%s] %s
", __func__, ERROR_MESSAGE);
exit(EXIT_FAILURE);
}
char* new_buffer = (char*)realloc(db->buffer, new_size);
if (!new_buffer) {
fprintf(stderr, "[%s] %s
", __func__, ERROR
} else {
db->buffer = new_buffer;
db->capacity = new_size;
}
}
// 버퍼 입력 함수
void buffer_input(DynamicBuffer* db) {
char input[1024];
printf("
입력 (q: 종료, m: 메모리 확인): ");
scanf("%s", input);
if (strcmp(input, "q") == 0) return;
if (strcmp(input, "m") == 0) {
printf("
현재 할당 크기: %zu KB
", db->capacity / 1024);
return;
}
// 입력 데이터 복사
size_t input_len = strlen(input);
if (db->used_size + input_len > db->capacity) {
resize_buffer(db, db->capacity * 2);
}
strcpy(db->buffer + db->used_size, input);
db->used_size += input_len;
}
int main() {
DynamicBuffer db = init_buffer(1024);
printf("
=== 동적 버퍼 관리 시스템 ===
");
while (1) {
buffer_input(&db);
if (strcmp(input, "q") == 0) break;
}
// 메모리 해제
free(db.buffer);
printf("
=== 프로그램 종료 ===
");
return 0;
}
등록일: 2025년 11월 01일 02:36
언어 정보
언어
C
카테고리
General
인기도
#5
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요