当前位置:  技术问答>linux和unix

请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?

    来源: 互联网  发布时间:2015-08-27

    本文导语:  以下程序在unix环境下,居然没溢出! #include char * fn() {      char * p;      p = (char *)malloc(50000000);      return p; } void main(int argc, char ** agrv) {       char *ptr;       long i = 0;       while (1...

以下程序在unix环境下,居然没溢出!

#include

char * fn()
{

     char * p;

     p = (char *)malloc(50000000);

     return p;

}

void main(int argc, char ** agrv)
{

      char *ptr;
      long i = 0;

      while (1)
      {
           ptr = fn();
           i++;
           if (i>1000000000) i = 0;
           printf("%dn",i);
      }

}




|
之所以没有溢出,是因为你系统给你的内存是有一定限制的,你的主函数经过一定次数的调用fn()之后,fn()将申请不到内存而返回NULL,将主函数改成:
void main(int argc, char ** agrv)
{

      char *ptr;
      long i = 0;

      while (1)
      {
           ptr = fn();
           if (ptr == NULL)
               break;

           i++;
           if (i>1000000000) i = 0;
           printf("%dn",i);
      }

}

不用多久,你的程序就会退出来了。

|
不会释放!!! 你这样就造成了分配的内存丢失, 也就是内存泄漏。

|
请问return语句会执行哪些操作?
1。把p的值放入某个寄存器中,如eax
2。把入栈时的压进堆栈的返回地址弹出到eip

在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗? 
不会,内存泄露。

|
你没有在fn()中释放,但你一定要在使用完释放不然就会有内存泄漏.

|
到了N次以后fn的返回值就是NULL了

|
当然不会的了啦,地址的分配要靠free()来释放的!

|
回复人: datuhao(峡谷) 
请问return语句会执行哪些操作?
1。把p的值放入某个寄存器中,如eax
2。把入栈时的压进堆栈的返回地址弹出到eip

------------------
1 仅在return 有参数时会把你的返回值传入eax

1.5。恢复现场
     恢复保护的寄存器 特别是esp,ebp
     pop ...
     leave 
2 返回调用者
     ret

    
 
 

您可能感兴趣的文章:

  • 请问如何在linux (redhat)下传递一维数组指针?
  • 请问如何根据函数指针打印出这个函数的名称?
  • 请问用JBuilder开发Applet,如果把鼠标指针变成漏斗?
  • 请问参考类型和指针有什么区别?
  • 请问ResultSet返回的是全部数据,还是指针,还是其他什么?
  • 请问:linux下如何将一个类的指针作为参数传给pthread_create创建的线程?
  • 请问下linux Kernel 下如何返回指针
  • 请问我的linux的内存占用率怎么老是接近100%啊?
  • 请问在SOLARIS上怎么实时查看程序的内存使用状况??
  • 请问debug如何用l命令把硬盘的目录表调入内存?
  • 请问红帽linux7.0支持3G的内存吗?
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 请问 AIX 对共享内存块数和每块的大小有什么限制。
  • 请问以root登录时(系统运行一会儿后)占用的内存为什么会激增?
  • sun机器一个一块内存和windows机器上一块内存的高低位相反,请问如何互相转换?
  • 急急急,请问如何检查C程序中内存泄露问题?
  • 请问:Linux的物理内存怎样看?
  • 请问怎么看LINUX的物理内存有多少?
  • 请问在Linux里,如何用JAVA读取内存里的PATH设置
  • 请问用GCC 编译,如何生成MAP文件?就是内存的分布映像文件?
  • 请问如何查看一个进程中 brk和mmap各自分配的内存空间的大小
  • 请问:在JAVA中创建句柄后,有没有给这个对象分配内存?
  • 编程语言 iis7站长之家
  • 请问用什么命令或者什么方式可以查看到一个进程用了多少字节或者多少兆的内存???????????????????????????
  • 请问在UNIX上如何看一个进程的内存使用情况?
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • 请问一个共享内存的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问a method能return an exception吗?能写个例子看看吗?
  • 请问这段代码为什么会出现return without value from....
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3