私は実際にこのラッパーを使用したいと思いますが、問題はまだ安全かどうかわかりません。メモリで安全な方法は?
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を2回呼び出します。イニシャライザは良いでしょうか?
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
2番目のコードスニペットでは、 'temp'は割り当て失敗のためにチェックされていません – fge