2016-10-09 3 views
-1

Я хочу понять, что free() в c освобождает память или просто удаляет данные в выделенной памяти malloc.освобождение памяти с помощью free()

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int n; 
    printf("enter the size of n:\n"); 
    scanf("%d", &n); 
    int* A=(int*)malloc(5*sizeof(int)); 
    int i; 
    for(i=0; i<n; i++) 
    { 
     printf("%d\n", &A[i]); 
    } 

    free(A); 

    printf("\n\n-------------\n\n"); 

    for(i=0; i<n; i++) 
    { 

     printf("%d\n", &A[i]); 
    } 

    return 0; 
} 

Тем не менее после того, освобождая его давая тот же адрес А. Что бесплатно() на самом деле?

+1

Что вам нужно знать о 'free' в стандартной библиотеке C, можно найти буквально * тысячи * мест через google-fu. [Здесь хороший] (http://en.cppreference.com/w/c/memory/free), и этот сайт стоит закладок. Это одна из лучших онлайн-ссылок для C (и C++), которые вы, скорее всего, найдете. Что касается вашей программы, вы передали 'A' по значению в' free'. он использует это значение для возврата памяти в диспетчер кучи для повторного использования. Значение 'A' не изменяется (и * не может быть *). После 'free' ваш' A' содержит * висячий указатель *, использование его значения приводит к * неопределенному поведению *. – WhozCraig

+0

Не рождайте результат 'malloc' & friends (или' void * 'вообще). – Olaf

ответ

0

Он освобождает память, но так как C позволит вам стрелять в ногу, указатель остается указывать на освобожденный блок памяти. Использование его каким-либо образом вызывает неопределенное поведение

Смежные вопросы