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

2024-11-28 18:48:32
推荐回答(3个)
回答1:

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

回答2:

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

回答3:

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