Случайные числа с использованием функции malloc - PullRequest
0 голосов
/ 22 января 2019

Почему числа после первой в каждой строке матрицы не случайные числа? Почему они нули? Например, если я напечатаю строку этой матрицы, я получу 4 0 0 0 0, но вместо этого я должен получить числа после 4 как случайные числа.

void readfile(FILE *input,int **matrix){
    int i=0, num;
    while(fscanf(input, "%d ", &num) == 1){
        matrix[i] = malloc((num+1)*sizeof(int));
        matrix[i][0] = num;
        i++;
    }
}

1 Ответ

0 голосов
/ 22 января 2019

Почему цифры после первой строки каждой строки матрицы не случайные числа?

Почему они должны быть?

Да, mallocвозвращает вновь выделенный блок неинициализированной памяти, но никто не сказал, что она должна быть случайной.

Действительно, обычно при запуске процесса вы получите пустые страницы , которые просто обнуляютсяоперационной системы и предоставленной вашему процессу (ОС не может перерабатывать страницы из других процессов, не отключая их по соображениям безопасности), в то время как позже вы с большей вероятностью получите назад страницы, которые есть у вашего процесса free d ,как правило, содержащие старые данные из вашей собственной программы.

Все это строго не по договору и часто нарушается - например, так называемые «отладочные кучи» обычно заполняют свободные страницы известным шаблоном ( например, 0xCDCDCDCD в Visual C ++ ) для определения использования неинициализированной памяти.

Короче говоря: не делайте никаких предположений о содержании memory предоставлено malloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...