野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13120|回复: 2

C语言怎样返回一个指针???

[复制链接]
发表于 2016-12-1 13:07:26 | 显示全部楼层 |阅读模式
本帖最后由 CSWZH8 于 2016-12-1 13:23 编辑

如题,我在调用的函数里面创建一个结构体指针变量,对结构体完成修改之后将指针返回,那么问题来了:因为实在函数中创建的局部的指针变量,在给结构体分配具体的内存空间的时候是分配在怎样的区域呢;
当函数返回时这个区域是否要回收呢;
如果回收的话,仅仅返回了一个指针会不会导致指针指向的结构体被其他函数的局部变量以外覆盖导致出错呢?

如果不回收的话,又是为什么不回收,岂不是每次调用都会增加一个内存消耗?


int *fun()
{
   int i=9;
   int *p1=&i;                   //
  // return &i;                     //返回临时变量地址,不安全 ,因为fun()调用结束后变量i已经被释放了
   return p1 ;                   //为什么返回指针类型就可以呢,指针指向的地址不是也被释放了吗??
}


void main()
{
    int *q=fun();
    printf("*q=%d",*q);
}
回复

使用道具 举报

发表于 2016-12-1 15:45:40 | 显示全部楼层
我只知道   return p1 ;   可以,其他的就靠你了,而且我也只会 这样写: return p1 ;  
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-3-29 16:28:41 | 显示全部楼层
知道怎么回事了,局部变量都是动态分配内存的,函数返回时内存就会释放。如果是裸机系统(没有MMU的小型系统也算是裸机),释放的内存不会被修改,应用也是可以随意访问任何地址的(因为无虚拟内存),所以尽快操作返回的指针是可行的。
如果是大型操作系统中一个程序(带虚拟内存),那么分两种情况,一种是如同裸机中的情况,尽快操作指针就行了;另一种是指针指向显式分配的内存,如malloc函数,那么在释放指针指向的空间之前,内存中的数据将一直有效。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 08:46 , Processed in 0.028593 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表