| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 570 人关注过本帖
标题:下面的程序的行为是未定义的,可能在运行时失败,问题出在哪,怎样改?
只看楼主 加入收藏
q1025518438
Rank: 2
等 级:论坛游民
帖 子:6
专家分:46
注 册:2013-6-11
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:8 
下面的程序的行为是未定义的,可能在运行时失败,问题出在哪,怎样改?
int foobar(int *pi){
  *pi=1024;
  return *pi;
}
int main{
  int *pi2=0;
  int ival=foobar(pi2);
  return 0;
}
搜索更多相关主题的帖子: return foobar 
2013-06-11 11:41
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:1 
int *pi2=0;
声明了指针,但是没有指向有意义的地方
后面函数又访问了指针指向的地方

int i;
int *pi2=&i;

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-06-11 11:53
q1025518438
Rank: 2
等 级:论坛游民
帖 子:6
专家分:46
注 册:2013-6-11
收藏
得分:0 
我怎么觉得你说的怪怪的!
(当指针持有0值时,表明他没有指向任何对象,或持有一个同类型的数据对象的地址。)书上说的。

我觉得不是你说的那样。
 
2013-06-11 12:24
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:1 
就是因为该指针指向不明确,所以不能乱赋值,指针在没有赋值情况下,会有一个随机初值,万一它指向某个重要数据内存,把它改掉了会造成意想不到的后果,甚至会导致系统崩溃。还有,楼主的main后面丢了()
2013-06-11 13:36
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:1 
我看出两个:
1、你的主函数写的不对int main();这样吧!
2、你的指针变量直接赋值不对,指针赋值不是那样的

Maybe
2013-06-11 15:30
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:1 
你的指针赋值不正确,如果直接复制那么表明指针是一个常量指针,并且指向静态存储区。这种指针是不允许更改的,否则会引起内存泄漏。但是你的确更改了,这就是你错的地方。这种赋值表达式是不规范,不允许的

C++菜鸟
2013-06-12 09:41
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:0 
我觉得应该是这样的。
#include "stdio.h"
int foobar(int *pi)
{
  *pi=1024;
  return *pi;
}
int main()
{
  int pi2;
    int ival;
  pi2=0;

  ival=foobar(&pi2);
  return 0;
}

加油加油!
2013-06-12 12:48
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:0 
用了指针,没必要返回*pi,直接输出就行了!
2013-06-12 14:27
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:1 
感觉指针赋值形式没错,

不过最好写成NULL,养成编程的好习惯。

另外建议主函数这样写
int main()//这里的括号必须有!
{
    省去内容

    return 0;
}

楼主写的代码虽然经过以上改正可以编译通过了

但是所得结果恐怕并非所需要的,

具体改正请借鉴楼上的回复。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-12 16:23
快速回复:下面的程序的行为是未定义的,可能在运行时失败,问题出在哪,怎样改? ...
数据加载中...
 
   



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

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