c语言函数的防止泄露 c++防止内存泄露

C语言标准库函数返回指针不会造成内存泄漏吗

标准库返回指针, 一般有三种情况

创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为南岳企业提供专业的做网站、成都网站建设,南岳网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

一种是 返回的指针,就是你传入参数或者其中的一部分。

典型的是字符串操作函数,比如 strcmp, strcpy, strstr等等。

第二种,是返回的指针,需要调用特定的函数去释放。 比如fopen函数返回的FILE*,需要调用fclose去释放。

第三种, 返回的指针,需要自行调用free去释放。

比如 malloc realloc 类的申请内存函数

以及strdup一类的复制函数。

每个标准库函数,都有自己的规范。 按照要求操作就不会内存泄露。否则就会产生。

c语言:函数调用时,栈的问题——(有请高手高手高高手)

必须出栈!

aa 和 bb 和c 都是函数内部的局部变量,函数返回后就被释放,也就是在栈中没有了,返回后就剩下图中main()函数所对应的栈结构.

栈只能够通过出栈来减少栈中数据的个数,从反面来讲,如果不出栈,funcA()函数返回后,栈指针还是指向c那,这肯定是不对的,因为函数返回后栈指针就得指向man()的栈结构了。

C语言中什么叫内存泄露?

一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。以下这段小程序演示了堆内存发生泄漏的情形:

void MyFunction(int nSize)

{

char* p= new char[nSize];

if( !GetStringFrom( p, nSize ) ){

MessageBox(“Error”);

return;

}

…//using the string pointed by p;

delete[] p;

}

当函数GetStringFrom()返回零的时候,指针p指向的内存就不会被释放。这是一种常见的发生内存泄漏的情形。程序在入口处分配内存,在出口处释放内存,但是c函数可以在任何地方退出,所以一旦有某个出口处没有释放应该释放的内存,就会发生内存泄漏。


分享文章:c语言函数的防止泄露 c++防止内存泄露
文章URL:http://pwwzsj.com/article/doccijh.html