标题:关于指针回收问题
只看楼主
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
结帖率:96%
已结贴  问题点数:10 回复次数:6 
关于指针回收问题
指针的回收和不回收问题弄不明白,请教各位!

写了个测试程序:
程序代码:
#include<stdio.h>
#include<stdlib.h>


char **tes()
{
    //定义一个指针数组
    char *ch[4];
    char **ret;
    ret=ch;
    //赋值
    ch[0]="asdf";
    ch[1]="fda";
    //返回
    return ret;                  //当函数结束后,这个指针是不是已经回收了?如果是,如何才能让他不回收,返回首地址首地址?请指教!
}

int main()
{
    char **ret;
    ret=tes();
    //输出,内存错误
    for(int i=0; i<2; i++)
    {
    printf("%s",*ret[i]);
    }
    system("pause");
}


搜索更多相关主题的帖子: 测试 回收 
2012-12-22 16:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:7 
基础不牢,把大量的时间和精力浪费在这些地方。指针关键是指向什么,那东西还在不在,不是看指针有没有回收。

授人以渔,不授人以鱼。
2012-12-22 16:32
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
得分:0 
回复 2楼 TonyDeng
回版主,
程序代码:
char **tes()
{
    //定义一个指针数组
    char *ch[4];
    char **ret;
    ret=ch;
    //赋值
    ch[0]="asdf";
    ch[1]="fda";
    //返回
    return ret; 
这里ret是指向ch指针数组的首元素地址。 return 就是返回这个指针首元素的地址。
 ret=tes();
接受传回来的首地址,然后再输出。
我的理解是这样,请问是不是呢?
2012-12-22 16:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
请问你ch[]数组在函数结束后还在不在?你还在看指针在不在,要看指针所指向的东西在不在才是正路呀!你真以为有地址就有数据呀?

授人以渔,不授人以鱼。
2012-12-22 16:44
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
得分:0 
回复 4楼 TonyDeng
版主教训的是。。。不该看指针了,应该看指针指向的内容那里!谢谢!
2012-12-22 16:48
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:3 
函数调用完之后,函数中的自动变量都会从栈里弹出,tes返回那个数组的地址也是错误的,毕竟那个数组已经无效了。

My life is brilliant
2012-12-22 16:49
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
得分:0 
谢谢,两位版主!
2012-12-22 16:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-392968-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.571278 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved