Базовая реализация malloc
или new
должна неизбежно отслеживать размер памяти, выделенной для вашей переменной. К сожалению, нет стандартного способа получить размер выделенного блока. Причина в том, что не все блоки памяти распределяются динамически, поэтому использование функции, которая работает только для динамического распределения, не очень полезно.
void fillwithzero(int* array) {
unsigned int size = getsize(array); // return 0 for statically allocated array ??
for(int i = 0; i < size; i++) {
array[i] = 0;
}
}
Допустим, у нас есть getsize
функция, которая способна волшебным образом получить размер динамически распределяемого массива. Однако, если вы отправите указатель статического массива или некоторого массива, выделенного другими средствами (например, внешней функцией), на fillwithzero
, эта функция не будет работать. Вот почему большинство функций C, которые принимают массив, требуют, чтобы вызывающая сторона отправляла размер или максимальный размер массива вместе с самим массивом.