| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 976 人关注过本帖
标题:动态数组的问题?求大牛们解答
只看楼主 加入收藏
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:12 
动态数组的问题?求大牛们解答
在100到1000中,求出个位、十位、百位上都相等的数,将其保存在数组中,在用动态数组时,程序中,for循环中输出可以得到正确的结果,但是在函数体里面就出现垃圾值
程序代码:
#include<stdio.h>
#include<stdlib.h>
int *fun(int n);
int main(int argc,char *argv[])
{
    int num_1=0;
    int *num_2=0;
    printf("请输入一个大于100小于等于1000的数!");
    scanf("%d",&num_1);
    fun(num_1);
     return 0;
}
int *fun(int n)
{
    int num_1=0;
    int num_2=0;
    int num_3=0;
    int num_4=0;
    int count_1=0;
    int count_2=0;
    int *p_coun=0;
    for(count_1=100;count_1<=n;count_1++)
    {    
         num_1=count_1/100;
         num_2=count_1%100;
         num_3=num_2/10;
         num_4=num_2%10;
         if((num_1==num_3)&&(num_3==num_4)&&(num_1==num_4))
         {
             p_coun=(int *)malloc(sizeof(int)*count_2);//用动态,但是不知道这样可不可以??
             p_coun[count_2]=count_1;
           printf("%d",p_coun[count_2]);//这里能输出我想要的结果
             ++count_2;            
         }
    }
   for(int i=0;i<count_2;i++)
            printf("%d\n",p_coun[i]);//输出的结构就乱了........
   return p_coun;
}
搜索更多相关主题的帖子: 1000 动态 
2012-07-25 18:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
动态数组是谁发明的叫法?

总有那身价贱的人给作业贴回复完整的代码
2012-07-25 18:25
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
你还是先好好查查malloc函数的用法,代码写的全是错误,都是因为你对malloc不明白,当然你对内存也不熟

总有那身价贱的人给作业贴回复完整的代码
2012-07-25 18:36
小无相
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2012-7-24
收藏
得分:3 
你申请内存的时候在for循环中,放在外边试试
2012-07-25 19:07
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
回复 3楼 embed_xuel
...望大牛指出,我感激不尽.....malloc用法只是大致的知道是分配内存.....望明示
2012-07-25 19:14
小无相
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2012-7-24
收藏
得分:0 
p_coun=(int *)malloc(sizeof(int)*count_2);中的count_2改成大于9的数(100到1000之间最多也就9个数满足条件),放在for循环前面就好了,也就是申请了 sizeof(int)*count_2这么多个存放整型的内存单元,sizeof(int)=4,32位的四个字节,
http://baike.baidu.com/view/736228.htm这有更详细的
2012-07-25 19:27
fybing2012
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2012-7-18
收藏
得分:3 
帮你分析分析前面正常,后面不正常的原因
 if((num_1==num_3)&&(num_3==num_4)&&(num_1==num_4))
 {
       p_coun=(int *)malloc(sizeof(int)*count_2);//用动态,但是不知道这样可不可以??
       p_coun[count_2]=count_1;
       printf("%d",p_coun[count_2]);//这里能输出我想要的结果
       ++count_2;            
  }
你在for循环里动态分配内存,第一次执行时,分配内存,然后把得到的值保存到分配的内存中,这没有问题,能得到正确的输出,
当下一次执行时,又一次分配内存(注意这次是新内存,和上一次的不是同一块),继续把值保持到内存中,同样能正确输出。而问题是每次开辟的
新内存都只有一为被赋值。当count_2=4时,只有p_coun[count_2]的值是确定的,而其他如p_coun[0],p_coun[1],p_coun[2]的值是不确定的,所以
在第二次for循环中,得不到想要的结果。
你的代码还存在其他的问题:
1、动态分配的内存需要手动释放;如:free( p_coun);
2、malloc分配的内存没有初始化,好的习惯是使用前初始化;如memset(p_cont, 0 , sizeof(p_cont));

要想沿用你的思路修改代码,你可以使用函数 void *realloc(void *ptr , size_t size);当已经分配的内存不够用时,常用这个函数扩大已有的内存,
第一个参数是指向当前已经分配的内存,第二个参数是新空间的大小。返回新的内存, 此函数不仅用户扩大分配的内存,也可以缩小分配的内存
具体自己查查资料



你见,或者不见我
我就在那里
不悲不喜
2012-07-26 00:26
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:3 
7楼 fybing2012 分析得很详细。
学习了!

做自己喜欢的事!
2012-07-26 11:35
我乃新手
Rank: 2
等 级:论坛游民
帖 子:52
专家分:73
注 册:2012-7-23
收藏
得分:3 
7楼正解,动态内存分配,要理解动态......
2012-07-26 11:51
小任
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:8
专家分:13
注 册:2012-7-24
收藏
得分:3 
弱弱的问句“int *p_coun=0”是不对的吧?指针好像不可以这样初始化的,是么?

博学,是一种态度,更是一种高度。
2012-07-26 12:27
快速回复:动态数组的问题?求大牛们解答
数据加载中...
 
   



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

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