1097758887 发表于 2023-3-25 11:29

c++的局部变量,能否被提前手动释放?

我们知道c++中的局部变量,在函数结束后会自动释放

但是,假定我这个函数是一个死循环的函数。不会运行结束,那这样我的局部变量就会一直占用内存空间。我该怎样提前释放它?

xia先生 发表于 2023-3-25 11:38

你要弄清楚什么是局部变量?这个变量里面存的是指针还是数值?都可以 赋值0来清除。但是如果你认为是堆栈。那你可以用汇编pop掉他

psvajaz 发表于 2023-3-25 11:42

把变量定义在循环外,一直复用这个变量,就不会要考虑资源释放问题

xlhwxyh 发表于 2023-3-25 13:30

c++ 有堆和栈,   栈空间无法释放!

Eaglecad 发表于 2023-3-25 14:46

需要手动释放的内存一定是程序申请的堆内存。
栈内存,只要不是存在无限递归,不会存在内存泄漏问题。
局部变量是指针 new malloc 需要手动 delete free 释放,智能指针,循环利用需要reset,最后可release释放。
如果死循环中只调用一次某个函数,call_once了解一下。
比如 循环外char* szBuf = new char{ 0 }; 循环里重复使用时,memset(szBuf, 0, nBufLen);,循环外 delete []szBuf。
循环内char* szBuf = new char{ 0 }; 循环里重复使用时,memset(szBuf, 0, nBufLen);,循环内 delete []szBuf,否则就会内存泄漏。

metoo2 发表于 2023-3-25 14:47

psvajaz 发表于 2023-3-25 11:42
把变量定义在循环外,一直复用这个变量,就不会要考虑资源释放问题

正解,楼主提出的问题好奇怪,不停的分配与释放么

JuncoJet 发表于 2023-3-25 16:35

栈不需要释放,在一个过程中不增不减
递归的时候就会比较麻烦

jamesAbc 发表于 2023-3-25 16:43

肯定不行啊

永驻的青春 发表于 2023-3-25 16:48

注意你的作用域,一般用花括号括起来就好了(花括号就是作用域)。就是,你在花括号里面声明了,函数运行到花括号外面自动就释放了。
页: [1]
查看完整版本: c++的局部变量,能否被提前手动释放?