标题:帮我看看吧..哈夫曼树的.
只看楼主
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
结帖率:100%
已结贴  问题点数:20 回复次数:7 
帮我看看吧..哈夫曼树的.
#include "top.h"
char *Getdata(char *temp,int *w,int n)
{
    int i,j,m;//k=0
    char *t,*string;
    t=(char*)malloc(100*sizeof(char));
    gets(t);
    string=(char*)malloc(strlen(t)*sizeof(char));
    while(*t)
    {
        *string=*t;
        t++;
        string++;
        //k++;
    }
    //string=t;
    for(i=0,j=0;string[i]!='\0';i++,j=0)
    {
        for(m=0;string[m]!='\0';m++)
        {
            if(string[i]==string[m])
            {
                j++;
                t[m]=' ';
            }
        }
        if(string[i]!=' ')
        {
            w=(int*)malloc(2*sizeof(int));
            temp=(char*)malloc(2*sizeof(char));
            *w++=j;//记录字符的权值
            *temp++=string[i]+1;//记录不同的字符
            n++;//记录不同字符的个数
        }
    }
}    return string;//返回原字符串

是不是我空间分配多了? 怎么改?
搜索更多相关主题的帖子: 哈夫曼 
2010-06-23 10:24
亦小轩
Rank: 1
等 级:新手上路
帖 子:3
专家分:8
注 册:2010-6-22
得分:4 
不懂

http://www. http://www.
2010-06-23 10:27
magicstory
Rank: 2
等 级:论坛游民
帖 子:6
专家分:16
注 册:2009-9-21
得分:4 
回复 楼主 mylzy159
你把malloc改为calloc试试。malloc分配内存时不初始化内存区域,故你用strlen时得到的长度是不对的。
2010-06-23 10:37
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
得分:0 
回复 3楼 magicstory
照你的改了..#include "top.h"
char *Getdata(char *temp,int *w,int n)
{
    int i,j,m;//k=0
    char *t,*string;
    t=(char*)calloc(100,sizeof(char));
    //t=(char*)malloc(100*sizeof(char));
    scanf("%s",&t);
    string=(char*)calloc(strlen(t),sizeof(char));
    //string=(char*)malloc(strlen(t)*sizeof(char));
    while(*t)
    {
        *string=*t;
        t++;
        string++;
        //k++;
    }
    //string=t;
    for(i=0,j=0;string[i]!='\0';i++,j=0)
    {
        for(m=0;string[m]!='\0';m++)
        {
            if(string[i]==string[m])
            {
                j++;
                t[m]=' ';
            }
        }
        if(string[i]!=' ')
        {
            w=(int*)malloc(2*sizeof(int));
            temp=(char*)malloc(2*sizeof(char));
            *w++=j;//记录字符的权值
            *temp++=string[i]+1;//记录不同的字符
            n++;//记录不同字符的个数
        }
    }
    return string;//返回原字符串
} 还是内存有问题.
2010-06-23 12:06
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:4 
把你top.h的代码贴出来看看

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-06-23 13:11
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
得分:0 
huffmancode.rar (316.83 KB)
我传个工程 有时间的高手帮我看看吧..
2010-06-23 13:33
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
得分:0 
真想搞清楚...来个人咯.
2010-06-23 18:33
magicstory
Rank: 2
等 级:论坛游民
帖 子:6
专家分:16
注 册:2009-9-21
得分:0 
回复 4楼 mylzy159
你的这个函数写的很乱,没仔细看,有一个明显的问题,
你的前两个函数参数temp,w是指向调用这个函数的两个变量的地址,
你这里 w=(int*)malloc(2*sizeof(int));temp=(char*)malloc(2*sizeof(char));
又把temp和w两个指针指向了新分配的地址空间。仔细琢磨下这个。
代码我没有细看,你代码写的很乱,自己先好好调试下,跟踪下各个变量的值。
2010-06-24 14:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-311008-1-1.html




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

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