Я подозреваю, что это вопрос языка C.
Если бы это был C ++, вы могли бы просто использовать std::vector
.
void foo( int a, int b )
{
std::vector<int> array( a );
// ...
}
Если это действительно C ++, то то, какие функции C ++ вы можете использовать безопасно, может зависеть от среды. Непонятно, что вы подразумеваете под «ядром».