在释放内存之前,请始终重新分配内存 - C 是安全的吗?

Is it safe to always reallocate memory before freeing it - C++

本文关键字:内存 分配 安全 新分配 释放      更新时间:2023-10-16

假设这样的代码:

#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;
}

我的假设是,这将指针发送到堆内存,以便可以适当释放。

所有这些都与程序员不知道在哪个内存(堆或堆栈)上指定指针的上下文(此时,该程序的设计受到质疑,但我不会离题)。


查询

这是确保内存正确释放>或的安全道,是不适当的并创建存储器中留下的垃圾对象吗?

您无法realloc堆栈内存 - 因此您仍然具有不确定的行为。

realloc(3)男人页面将告诉您:

重新关注给定的内存区域。必须以前分配 由malloc(),calloc()或realloc(),尚未释放 免费或realloc。否则,结果是不确定的。