calloc
基本的には、すべてのデータを 0 バイトに設定するのと同じですmalloc
。memset
void *like_calloc(size_t size, size_t num) {
void *ret = malloc(size * num);
if (ret)
memset(ret, 0, size * num);
return ret;
}
C++ は、new
これをもう少し簡単に行うための構文を提供します。
int *count = new int[256]();
最後の括弧に注意してください。ただし、通常、これを C++ で行うことはまったく望まないことに注意してください。通常は、次のようなコードを記述します。
std::vector<int> getCharCountArray(unsigned char const *str) {
std::vector<int> count(std::numeric_limits<unsigned char>::max()+1);
for (int i=0; str[i]; i++)
++count[str[i]];
return count;
}
これにより、明らかにコードがかなり単純化されますが、すぐにわかるよりもさらに単純化されています。具体的には、これにより、戻り値が不要になったときに残りのコードを追跡する必要がなくなり、C バージョンまたはnew
C++ を使用するバージョンで必要とされるように、その時点で (ただしすぐには) メモリを削除する必要がなくなります。