に配列サイズを計算する:は、私は私のCコードで配列のサイズを計算するためのマクロを持っているC
#define sizearray(a) (sizeof(a)/sizeof((a)[0]))
私はそれをテストするとき、それは静的に定義された配列のため正常に動作しますが、ないので、動的に定義された配列のために(参照します以下)。なぜこれが当てはまるのか分かりません。ヒープに割り当てられた配列のサイズを計算する方法はありますか?
/* test sizearray macro */
void testSIZEARRAY(void)
{
/* test case for statically defined array */
int a[5] = {0,0,0,0,0};
assert(sizearray(a) == 5);
/* test case for dynamically defined array */
int *b;
b = calloc(5, sizeof(int));
assert(sizearray(b) == 5);
free(b);
}
sizeofはコンパイル時に評価されます。だから、それは不可能です。 – ordag
[Cで動的に作成された構造体の配列の長さを取得する方法は?](http://stackoverflow.com/questions/8717267/how-to-get-the-length-of-a-dynamically-構造体の中に構造体を作成しました – dasblinkenlight
[配列のサイズを計算する]の複製が可能です(http://stackoverflow.com/questions/720077/calculating-size-of-an-array) –