Мое странное предположение, поскольку вы не показываете важную деталь того, как объявляется numbers
, это то, что это указатель, а трюк sizeof
не может вычислить выделенный размер.Лучше использовать основанный на шаблоне sizeof, например:
template <typename T, int N>
int array_size( T (&)[N] ) {
return N;
}
или:
template <typename T, int N>
char (&array_size_impl( T(&)[N] ))[N];
#define ARRAY_SIZE( x ) sizeof( array_size_impl( x ) )
Так как они будут вызывать ошибки времени компиляции, если используется указатель, вместо тихого сбоя и выдачинеожиданные результаты как sizeof(x)/sizeof(x[0])
трюк.