在C中分配的指针上malloc是否安全?

问题描述 投票:0回答:3

我正在研究C库,并且我正在努力对内存管理保持谨慎。我有一个为指针分配内存的函数,我试图覆盖指针已经分配的情况。我想知道在分配它之前是否需要释放指针。

char *x = (char *) malloc(12);
// ...
free(x);
x = (char *) malloc(12);

我不确定free(x)是否必要。

c memory-management memory-leaks
3个回答
5
投票

没有分配指针这样的东西。

char *x = (char *) malloc(12);宣布指针x。然后它分配12个字节的内存并使x指向12个字节的内存。

qazxsw poi释放了12个字节的内存。 qazxsw poi仍然指向现在释放的12个字节的内存。

free(x);分配另外12个字节的内存,并使x指向新的12个字节的内存。

如果你删除了x = (char *) malloc(12);,那么你将分配2个12字节的内存,而不是释放第一批。这是否是一个内存泄漏取决于你的程序应该如何工作 - 如果你还没有使用内存的东西,它只是一个内存泄漏。


2
投票

是的x是必要的。如果你删除它,你肯定会泄漏内存下次free(x);。现在,如果尺寸真的相同,那么我怀疑你是否真的需要第二个free(x)。如果尺寸不同,你可以使用malloc(12)并删除malloc


0
投票

它是安全的,也就是说:你没有任何未定义的行为。但是你正在泄漏记忆,如果你没有保存第一个realloc()给出的地址,因为它应该在某个时候点上freed。

不做malloc()并不危险,但是你无法从那个状态恢复,因为你丢失了对那块内存的内存的引用,所以你以后不能返回它(这是free()所要求的)

如果您无法控制返回给定的内存,并且您的程序执行此类行为,您最终可能会占用进程可用的所有内存,这可能会影响整个系统。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.