[英]Is it safe to malloc on an allocated pointer in C?
我正在使用C库,并且正在对内存管理非常谨慎。 我有一个为指针分配内存的函数,并且试图覆盖指针已经分配的情况。 我想知道是否需要在分配指针之前释放指针。
char *x = (char *) malloc(12);
// ...
free(x);
x = (char *) malloc(12);
我不确定free(x)
是否必要。
没有分配指针。
char *x = (char *) malloc(12);
声明一个指针x
。 然后,它分配12个字节的内存,并使x
指向12个字节的内存。
free(x);
释放12个字节的内存。 x
仍指向现在已释放的12个字节的内存。
x = (char *) malloc(12);
分配另外12个字节的内存,并使x
指向新的12个字节的内存。
如果删除了free(x);
那么您将分配2个12字节的内存批次,而不释放第一批内存。 这是否是内存泄漏取决于程序的工作方式-如果您还不使用内存来处理某些事情,那仅仅是内存泄漏。
是的,需要free(x)
。 如果删除它,那么当您下次执行malloc(12)
时,肯定会泄漏内存。 现在,如果大小确实相同,那么我质疑您是否真的需要第二个malloc
。 如果大小不同,则可以使用realloc()
并删除free
。
是安全的,也就是说:您不会招致任何未定义的行为。 但是,如果您没有保存第一个malloc()
给出的地址,则会泄漏内存,因为在以后的某个时候应该是free()
d。
如果不这样做的free()
并不危险,但你不能从这种状态中恢复过来,因为你失去了参考,其中的内存块是内存,所以你不能稍后返回它(它是由要求 free()
如果您不控制返回给您的内存,而您的程序执行了这种行为,那么您最终可能会吃光进程可用的所有内存,这可能会影响整个系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.