在释放内存之前,请始终重新分配内存 - C 是安全的吗?
Is it safe to always reallocate memory before freeing it - C++
假设这样的代码:
#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。否则,结果是不确定的。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配