Ненормальное поведение функции malloc ()?

Я поигрался с функциями alloc в 64-битном Ubuntu 14.04, gcc версии 4.8.2 (Ubuntu 4.8.2-19ubuntu1) и обнаружил, что malloc возвращает память с инициализацией ее нуля. Что довольно странно, так как не должно инициализироваться, а возвращаемый блок памяти должен быть неинициализирован.

Код выглядит следующим образом:

#include<stdio.h>
#include<stdlib.h> 
int main()
{
    int *i=(int*)malloc(4);
    printf("The Address of pointer is %p and Value is %d\n",i,*i);
    return 0;
}

Вывод:

The Address of pointer is 0x843070 and Value is 0  

Я также пытался назначить большие куски памяти с тем же результатом. Кто-нибудь может подсказать, почему это происходит?

1
задан 13 April 2015 в 23:03

1 ответ

malloc() выделяет память от "кучи", которой она управляет. Это очень хорошо может возвращать блок "кучи", которая ранее использовалась и затем free()ed, и таким образом, это будет все еще содержать любые данные, был там прежде. Когда еще нет никакой "кучи", или не любого свободного, это должно получить больше поршня из ядра для увеличения "кучи". Когда ядро дает новому процессу больше поршня, оно удостоверяется, что обнулило все это сначала, чтобы один процесс быть в состоянии получить и исследовать данные, освобожденные другим процессом, который может содержать уязвимую информацию. Таким образом то, что Вы, вероятно, видите, является первым разом Вы malloc() любая память, он прибывает прямо из ядра и таким образом zeroeod вместо того чего снова использ "куча" в рамках процесса, который не был бы обнулен.

2
ответ дан 13 April 2015 в 23:03

Другие вопросы по тегам:

Похожие вопросы: