Предположим, что код такой:
#include <stdlib.h>
int main(int argc, char* argv[]) {
int value = 42;
void* pointer = (void*) &value;
// Free stack memory
free(pointer);
return 0;
}
Этот код приводит к неопределенному поведению , поскольку он пытается освободить память в стеке.
Но мне было интересно;Как насчет перераспределения указателя каждый раз перед тем, как мы его освободим.
#include <stdlib.h>
int main(int argc, char* argv[]) {
int value = 42;
void* pointer = (void*) &value;
// Allocate pointer on heap, then free memory
pointer = realloc(pointer, sizeof pointer);
free(pointer);
return 0;
}
Я предполагаю, что это отправляет указатель в память кучи, чтобы его можно было соответствующим образом освободить.
Все этос контекстом, в котором программист не знает, на какой памяти (куче или стеке) указан указатель (в какой момент дизайн программы подвергается сомнению, но я не отступлю).
Запрос
Это безопасный способ гарантировать, что память освобождается должным образом или , это неправильно и создает объекты мусора, оставленные в памяти?