是否可以在不使用malloc的情况下进行内存泄漏?

Mik*_*kov 4 c c++ memory memory-leaks memory-management

这个问题如标题所示:是否有可能在不使用任何内核特定方法(如malloc,new等)的情况下产生内存泄漏?

如果我在一个包含很多元素的函数内部创建一个链表怎么办,之后我会退出这个函数而不清理列表.该列表将在不使用任何malloc调用的情况下创建,即

struct list_head {
     struct list_head *next, *prev;
}
Run Code Online (Sandbox Code Playgroud)

可以保证在退出此功能后将释放所有资源吗?所以我可以自由地执行它一百万次,什么都不会被泄露?

主题:如果您不使用任何特定的malloc或新调用,则不会出现堆内存泄漏.决不.是对的吗?

Ker*_* SB 12

一个泄漏始终连接到一个资源.根据定义,资源是您手动获取的,并且您必须手动释放.内存是一个很好的例子,但也有其他资源(文件句柄,互斥锁,网络连接等).

获取资源时会发生泄漏,但随后会丢失资源的句柄,以便没有人可以释放它.泄漏的较小版本是"仍然可达"的情况,您不释放资源,但您仍然拥有句柄并可以释放它.这主要是懒惰,但相反的泄漏总是一个编程错误.

由于您的代码从不获取任何资源,因此它也不会有任何泄漏.

  • @icepack:你能举一个例子来说明你的想法,语言本质吗?(C 或 C++ 中没有“堆栈指针”。) (2认同)