请问:如下函数调用有问题否?

[复制链接]
2378|7
 楼主| oumi 发表于 2008-10-21 15:29 | 显示全部楼层 |阅读模式
INT8U *func1(void)
{
    INT8U temp[100] ;
    memset(temp,0,sizeof(temp)) ;
    return temp ;
}
void func2(void)
{
    INT8U *p ;
    INT8U temp ;
    p = func1() ;
    temp = *(p+50) ;
}
 楼主| oumi 发表于 2008-10-21 16:06 | 显示全部楼层

主要就是func1中temp[100]的生存期的问题

dld2 发表于 2008-10-21 16:12 | 显示全部楼层
 楼主| oumi 发表于 2008-10-21 16:18 | 显示全部楼层

请指教,谢谢

dld2 发表于 2008-10-21 16:23 | 显示全部楼层

re

主要是想干什么。
正常情况下这个程序没有意义。会得到什么结果和编译器有关。
 楼主| oumi 发表于 2008-10-21 16:55 | 显示全部楼层

hi

我知道可以写成地址做形参传递,但是突然想到了就问问,瞎搞是不错的,在keil中这种写法写成
void func1(INT8U *src,INT8U length)
{
    memset(src,0, length) ;
}
void func2(void)
{
    INT8U temp1[100] ;
    INT8U temp2 ;
    func1(temp1,sizeof(temp1)) ;
    temp2 = temp1[50] ;
}

那么在vc里的postmessage()呢?还有keil里到底有没有问题?
dld2 发表于 2008-10-21 17:07 | 显示全部楼层

re

顶楼的p = func1() ;
得到就是一个野指针。读读倒也罢了,如果要向里面写什么,后果自负。
就是这样。
gszou 发表于 2008-10-22 17:12 | 显示全部楼层

有点不明白。

1:    p = func1() ;
2:    temp = *(p+50) ;

在第1行时,func1()的地址值给了P;
在第2行时,func1的地址加50,那到了什么地方了?
取这样的值,C语言中好像没这方面的介绍吧。这样的话不就不同的编译器,不同的结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部