考虑使用sTmp
定义的(char *)
变量malloc
,
如果我将另一个变量分配给此sTmp
,那么通过此变量分配的内存是否会自动释放,或者该内存块是否仍然分配(并且无用),直到该过程结束?
让我用代码解释一下:
int main () {
char *sTmp = (char *) malloc (50);
char *sNew = strdup ("some text"); // length is less than 50
sTmp = sNew;
/* now sTmp points to sNew and it's length is 10 chars
I wonder, what happened to the allocated memory of 50 chars in the first line;
Does it get freed implicitly or remain allocated?
*/
}
答案 0 :(得分:4)
“malloc”ed内存是否会被隐式释放?
不,C中没有垃圾收集器机制。
您必须使用free
malloc
分配的内存
sTmp = sNew;
此赋值语句导致内存泄漏,在分配之前释放对象。
答案 1 :(得分:2)
由于某个记忆区已经malloc
- 但不是free
- d,因此您有一个memory leak。
但是,在大多数操作系统上(特别是在Linux和其他POSIX系统上),操作系统在process终止后释放所有资源(包括内存)。所以你可能决定不打扰太多(至少对于malloc
的数据 - 仅在一次非正式时间内编辑一次。)
你可以使用像valgrind这样的内存泄漏检测器,你应该编译所有警告和调试信息(例如gcc -Wall -g
)并使用调试器(例如gdb
)
顺便说一句,您可以考虑使用garbage collector,例如Boehm's conservative garbage collector。然后,您将使用GC_MALLOC
代替malloc
,GC_STRDUP
代替strdup
,而您也无需致电free
(如果您这样做,那么,您我会打电话给GC_FREE
。 GC通常会释放无法访问的内存。
答案 2 :(得分:1)
内存被分配并且指向它的指针丢失了,现在你不能释放这个内存直到程序结束