游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1969|回复: 5

帮偶改改这个C++程序!!!!

[复制链接]

9

主题

20

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2007-2-2 20:36:00 | 显示全部楼层 |阅读模式
#include<iostream.h>
float *fcin()
{
        static float *p;
        float a[9];
        for(int i=1;i<10;i++)
        {
                cin>>a;
        }
        return p=a;
}
float *fpaixu(float *pl)
{
        float a[9],max;
        float *pp;
        for(int i=0;i<9;i++)
        {
                a=*pl;
                pl++;
        }
        for(i=1;i<9;i++)
        {
                for(int j;j<i;j++)
                {
                        if(a[j]>a)
                        {max=a[j];a[j]=a;a=max;}
                }
        }
        return pp=a;
}
void fcout(float *pk)
{
        for(;*pk!='\0';pk++)cout<<*pk;
}
void main()
{
        float *pb,*pl;
        pb=fcin();
        pl=fpaixu(pb);
        fcout(pl);
} [em17] [em17] [em17] [em17] [em17]

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-2-3 00:27:00 | 显示全部楼层

Re:帮偶改改这个C++程序!!!!

自己改,实在不行看看类似的例子,很好的锻炼机会……

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-2-3 03:59:00 | 显示全部楼层

Re:帮偶改改这个C++程序!!!!

发现严重问题,你的数组a都是局部变量,在离开它所在的作用域时相应的内存空间会被释放。也就是a里的内容已经不受程序控制了,随时会被改写,函数所返回的地址p其实是一个非法地址。

应该定义全局的数组a或者在函数中使用new来为a分配空间。
一个函数是绝对不可以返回一个局部变量的地址的。

6

主题

396

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
发表于 2007-2-3 10:09:00 | 显示全部楼层

Re:帮偶改改这个C++程序!!!!

楼上真热心呀,我一看没说明没注释,我就吃饭去了

9

主题

20

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2007-2-3 11:15:00 | 显示全部楼层

Re: Re:帮偶改改这个C++程序!!!!

mousesure: Re:帮偶改改这个C++程序!!!!

楼上真热心呀,我一看没说明没注释,我就吃饭去了

以后一定加注释:那个问题我解决了,谢谢大家的支持!

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
QQ
发表于 2007-2-9 01:04:00 | 显示全部楼层

Re:帮偶改改这个C++程序!!!!

绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。

     ----effectiv C++ 3e 中文版第 21条
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 10:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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