Как разработать функцию формирования массива

У меня есть следующее задание: дано натуральное число n. Разработать функцию формирования массива, элементами которого являются цифры числа n. Я написал программу, но что-то не так. Если я ввожу с консоли двузначное число, то она просто ничего не выводит. Если я ввожу трехзначное число, то вызывается исключение. Я подозреваю, что это связано с моей переменной len, а также с тем, как я возвращаю массив из функции. Что и как нужно исправить?

int* BuildArray(int n, int* len);

int main() {
    int n, len;
    scanf_s("%d", &n);
    int * arr = BuildArray(n, &len);
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

int* BuildArray(int n, int* len) {
    int b = n;
    while (n > 0) {
        n = n / 10;
        len++;
    }

    int* array = (int*)malloc(*len* sizeof(int));
    for (int i = len - 1; i >= 0; i--) {
        array[i] = b % 10;
        b = b / 10;
    }
    return array;
    free(array);

Ответы (1 шт):

Автор решения: vlad9i2

Во-первых вы не обнулили переменную len

int n, len = 0;

Во-вторых в этом цикле:

while (n > 0) {
        n = n / 10;
        len++;
    }

Вы прибавляете единицы к указателю, а не к переменной.

Правильно будет так:

while (n > 0) {
        n = n / 10;
        *len = *len + 1;
    }

Такая же проблема в следующем цикле здесь:

for (int i = *len - 1; i >= 0; i--) {
        array[i] = b % 10;
        b = b / 10;
    }

В-третьих память в таком коде никогда не будет освобождена, т.к. будет вызван return.

return array;
free(array);
→ Ссылка