Scanf с указателем на указатель - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно создать гистограмму с двумя функциями

create_histogram: динамически распределяет размер массива гистограмма: Функция создает гистограмму с номерами от самого низкого до самого большого. Функция должна распределять память для нашей гистограммы в диапазоне от начала до конца. Результат нужно сохранить в ** out.

Моя проблема заключается в функции scanf. Я не знаю, как сканировать числа, данные пользователем, чтобы сохранить их в указатель на указатель (** out). Другая проблема также освобождает память указателя на указатель, я не уверен, правильно ли я делаю.

Это моя домашняя работа, поэтому не спрашивайте меня, почему вместо одного указателя есть указатель, это не моя идея.

printf("Enter numbers:\n");
for(int i=0; i<N; i++)
{
//INPUT NUMBERS TO POINTER TO POINTER (PROBLEM)
if(scanf("%d", (tab+i)) != 1)
    {
        printf("Incorrect input");
        free(tab);
        return 1;
    }
}

int **output;
int out_s;
int out_b;

histogram(tab, N, output, &out_s, &out_b);

free(tab);

//Freeing memory of pointer to pointer (PROBLEM)
for(int i=0; i<out_s; i++)
{
    free(*(output+i));
}
free(output);

//Allocating the memory for histogram
out = (int **)malloc(*out_size * sizeof(int *));
for (int w=0; w<*out_size; w++)
{
    *(out+w) = (int*) malloc(1 * sizeof(int));
}

//creating histogram
    for(int i=*out_begin; i<*out_size; i++)
    {
        for(int j=0; j<*out_size; j++)
        {
            if(*(tab+j) == i)
            {
                *(out+i) = *(out+i) + 1;
            }
        }
    }

//Free the pointer to pointer
    for(int i=0; i<*out_size; i++)
    {
        free(*(out+i));
    }
    free(out);
...