2015-11-04 7 views
2

Я выделяю память на пустоту * определенного размера. После выделения я хочу показать утечку памяти и хочу освободить эту память, но до определенного размера.Распределение памяти и освобождение памяти в C

Например: Я выделил память 1000 байт, используя malloc, теперь я хочу освободить 500 байтов этих 1000 байт.

Как я могу это сделать?

Спасибо и наилучшие пожелания

+0

Это просто невозможно, вы не можете освободить половину части памяти, которую вы выделили. Это все или ничего. И чтобы имитировать утечку памяти, почему бы просто не освободить память? –

+0

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

+0

[Не точный обман] (http://stackoverflow.com/q/27876923/2173917), но может дать некоторое представление. –

ответ

1

Там нет никакого способа, чтобы освободить только 500 байт из 1000bytes выделенного.

free() функция принимает указатель, возвращенный только malloc() и его семейные функции для выделения. Таким образом, он освободит всю выделенную память.

Если цель состоит в том, чтобы показать утечку памяти тогда

void func() 
{ 
    void *p = malloc(1000); 
    // Some stuff 
    return; 
} 

Память выделяется не освобождается здесь и у вас есть утечка памяти.

2

Невозможно до free только некоторая память из выделенного. Но у опции realloc есть попытки изменить размер блока памяти, на который указывает ptr, который ранее был назначен вызовом malloc или calloc.

void func() 
{ 
     //allocate 1000 byte 
    void *ptr = malloc(1000); 

     //reallocate with new size 
    ptr = realloc(ptr ,500); 
     //Now you have memory of 500 byte 


     //free memory after use 
    return; 
} 
Смежные вопросы