이 래퍼를 실제로 사용하고 싶습니다만, 문제는 아직 안전하지 않은지 잘 모릅니다.메모리로 안전하게하는 방법?
malloc()
, calloc()
및 realloc()
과 관련하여 몇 가지 간단한 질문이 있습니다. 여기에 지금까지이 작업은 다음과 같습니다
string.h
typedef struct str str; // pointer for encapsulation
string.c
struct str
{
char *buf;
size_t len;
}
내가 단순히이 수행하는 도우미 함수가 말 :
str *NEW_STRING()
{
str *temp = calloc(1, sizeof (struct str));
temp->len = 0;
temp->buf = (char *) malloc(1);
return temp;
}
인가를 이 금고? 이 경우 나는 이런 식으로 뭔가 한 경우에, 무슨 일이 일어날 것 :
str *A_STRING = NEW_STRING();
A_STRING = NEW_STRING();
그것은 두 배의 malloc과은 calloc을 부를 것이다, 즉 나쁜입니까? 이니셜 라이저가 더 좋을까요?
void str_init(str *A_STRING)
{
if (A_STRING)
{
free(A_STRING);
}
if (A_STRING->buf)
{
free(A_STRING->buf);
}
A_STRING = calloc(1, sizeof (struct str));
A_STRING->buf = (char *) malloc(1);
A_STRING->len = 0;
}
마지막으로 메모리를 해제하는 좋은 방법입니까?
void free_string(str *A_STRING)
{
if (A_STRING->buf)
{
free(A_STRING->buf);
}
else
{
A_STRING->buf = NULL;
}
if (A_STRING)
{
free(A_STRING);
}
else
{
A_STRING = NULL;
}
A_STRING->len = 0;
}
추가 정보가 있으면 좋을 것입니다. 나는 좋은 도서관 인 것처럼 대중에게 무엇이든 공개하고 싶지 않습니다. 왜냐하면 저는 주로 학습 목적으로 이것을하고 있기 때문입니다. 오류의
정말 C++이 없으면 많은 것을 할 수 없습니다. – SLaks
내가 C++을 좋아하지 않아. – joob
두 번째 코드 스 니펫에서 'temp'는 할당 실패로 확인되지 않는다. – fge