当我 malloc() 为一个函数的局部指针分配内存时, 我还需要用 free() 明确的释放吗?

2024-11-28 19:05:47
推荐回答(5个)
回答(1):

需要!
假设有
char *p;
p = (char*)malloc(n);
则是p指向malloc开辟的内存空间地址。
free释放的是malloc开辟的内存空间,所以就必须了。

记住有malloc就有free,必须是成对出现的。

回答(2):

其实做到动态开辟分配并且释放是很难的 在大程序中你要考虑你开辟的内存空间何时才能释放 比如很长一段时间可能不会用 如果你不释放那么这段空间就一直在 无疑降低了你内存使用率 但是可能又会马上要用 你释放了又得开辟 所以这个释放问题你得考虑空间和时间 孰轻孰重了
所以java 和 C++分别都有垃圾回收器和析构函数来做这个 不要程序员来做 当然这降低了运行效率 (linus就这样说C++ 他极其不喜欢C++)
如果你是在函数中开辟的 而且没有释放 因为你还想用 所以你这个函数应该返回开辟空间首地址(有可能你形成链表使用)并且应该付给一个指针变量 如果不返回 这段空间就在内存中消失 直到你释放或者整个程序退出 这就是所谓的(内存泄露)

回答(3):

是的。记住指针和它所指向的东西是完全不同的。 局部变量在函数返回时就会释放, 但是在指针变量这个问题上, 这表示指针被释放, 而 不是它所指向的对象。用 malloc() 分配的内存直到你明确释放它之前都会保留在那里。 一般地, 对于每一个 malloc() 都必须有个对应的 free() 调用。

回答(4):

需要释放
1.你可以在函数return之前将该内存释放掉.
2.如果分配的这个内存需要传出函数外部使用,那么当使用完毕后,也必须释放.
否则,内存就会泄露掉.

回答(5):

每一个mallco()都应该和一个free()配对;