| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1703 人关注过本帖
标题:被调函数返回一个函数内部定义的变量的地址,此时这个地址对应的垃圾值能被 ...
取消只看楼主 加入收藏
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
结帖率:95.24%
收藏
已结贴  问题点数:20 回复次数:6 
被调函数返回一个函数内部定义的变量的地址,此时这个地址对应的垃圾值能被还原吗?
下面这段代码被调函数返回了一个在自己内部定义的变量的地址。

我在想虽然内存被释放了,但是由于之前有为这块内存写入一个值
再用一个指针去指向这块内存的地址,读取所谓的垃圾值时是否还能还原之前的那个值?

用下面这段代码测试从结果看int类型被还原了,char类型也以可以。返回字符串为什么不行?

程序代码:
 #include <stdio.h>
#define LEN 8

int * f1(void);
char * f2(void);
char * f3(void);
int main(void)
{
    int n;
    char c;
    char *s;
    int i;
    
    n = *f1();
    printf("%d\n", n);
    
    c = *f2();
    printf("%c\n", c);

    s = f3();
    printf("%s\n", s);
    for(i = 0; i < LEN; i++)
        printf("%c\n", s[i]);
    
    return 0;
}    


int * f1(void)
{
    int a = 80;
    
    return  &a;
}   

char * f2(void)
{
    char b = 'w';
    return &b;
}  

char * f3(void)
{
    char j[LEN];
    int i;

    for (i = 0; i < LEN; i++)
        j[i] = i + '0';
    j[LEN -1] = '\0';
    
    return  j;
}   


[ 本帖最后由 TAAAAB 于 2015-3-19 16:33 编辑 ]
搜索更多相关主题的帖子: include 字符串 
2015-03-19 16:00
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 2楼 longwu9t
大意了,代码更正过来了。但是字符数组还是不行?

人有多懒,编程就有多难。
2015-03-19 16:35
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
以下是引用longwu9t在2015-3-19 17:00:46的发言:


char * f3(void) {
    char *p = "1234567";
    return  p;
}

你这里不一样是把字符串常量的地址发给了指针

人有多懒,编程就有多难。
2015-03-19 20:34
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
以下是引用zklhp在2015-3-19 17:35:02的发言:




#include <stdio.h>

int *ret_stack_var(void)
{
    int tmp = 0;
    return &tmp;
}

int main(void)
{
    int *get_dangling_pointer = ret_stack_var();
    scanf("%d", get_dangling_pointer);
    printf("%d\n", *get_dangling_pointer);
    return 0;
}

会被冲掉 但不是【必定】被冲掉 更不是马上被冲掉

试了一下这段代码,为什么输入数字就出错,输入字符就可以通过?

人有多懒,编程就有多难。
2015-03-19 20:36
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
先不考虑内存释放后是否被新的数据冲掉。假设没有被新的数据冲掉,那么通过函数f3返回的地址,能不能再重现f3中定义的字符串呢?

人有多懒,编程就有多难。
2015-03-19 20:40
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
看来问题只能靠慢慢学习了,了解多了总会明白的。

人有多懒,编程就有多难。
2015-03-21 17:57
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 15楼 TonyDeng
没有弄清不确定的原因,想知道计算机内部是怎样运作导致的不确定。既然不确定,那么在什么情况下行?能否有方法去验证。

人有多懒,编程就有多难。
2015-03-22 09:32
快速回复:被调函数返回一个函数内部定义的变量的地址,此时这个地址对应的垃圾值 ...
数据加载中...
 
   



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

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