求助程序停止工作 C语言

NIL_ 2017-11-08 09:54:41
我想做一个赫夫曼树,想使用动态数组,经过一番折腾之后,没有error 了,可是运行之后 就弹出了 停止工作 !! 我觉得是哪里内存分配出了问题,但是作为小白实在找不到问题在哪里!!! 求助各位大神了~
#include<stdio.h>
#include<stdlib.h>
typedef struct huftree{
int weight;
int Plink,Llink,Rlink;
} *HFT,Tnode;
typedef struct hufcode{
int star;
int symbol;
int bits[5];
} *HFC,Cnode;

void intilTree(int *w,int n,HFT ht,HFC hc){
int i;
for(i=1;i<n+1;i++){
ht[i].Llink=0;
ht[i].Plink=0;
ht[i].Rlink=0;
ht[i].weight=w[i];

}
for(i;i<2*n;i++){
ht[i].Llink=0;
ht[i].Plink=0;
ht[i].Rlink=0;
ht[i].weight=0;
}

}//intil
main(){
HFT ht;
HFC hc;
int n;
int *w;
int i=0;
int w0;
int m;
m=2*n-1;
printf("shuru N\n");
scanf("%d",&n);
w=(int*)malloc((n+1)*sizeof(int));
ht=(HFT)malloc((m+1)*sizeof(Tnode));
hc=(HFC)malloc((n+1)*sizeof(Cnode));

for(i=1;i<n+1;i++){
printf("第%d个权值\n",i);
scanf("%d",&w0);
w[i]=w0;
}
intilTree(w,n,ht,hc);
for(i=1;i<=m;i++){
printf("%d %d %d %d\n",ht[i].weight,ht[i].Llink,ht[i].Rlink,ht[i].Plink);
}
}


...全文
240 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-08
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
NIL_ 2017-11-08
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
#include<stdio.h>
#include<stdlib.h>
typedef struct huftree{
    int weight;
    int Plink,Llink,Rlink;
} *HFT,Tnode;
typedef struct hufcode{
    int star;
    int symbol;
    int bits[5];
} *HFC,Cnode;

void intilTree(int *w,int n,HFT ht,HFC hc){
    int i;
    for(i=1;i<n+1;i++){
        ht[i].Llink=0;
        ht[i].Plink=0;
        ht[i].Rlink=0;
        ht[i].weight=w[i];

    }
    for(;i<2*n;i++){
        ht[i].Llink=0;
        ht[i].Plink=0;
        ht[i].Rlink=0;
        ht[i].weight=0;
    }

}//intil
main(){
    HFT ht;
    HFC hc;
    int n;
    int *w;
    int i=0;
    int w0;
    int m;
    printf("shuru N\n");
    scanf("%d",&n);
    m=2*n-1;
    w=(int*)malloc((n+1)*sizeof(int));
    ht=(HFT)malloc((m+1)*sizeof(Tnode));
    hc=(HFC)malloc((n+1)*sizeof(Cnode));

    for(i=1;i<n+1;i++){
        printf("第%d个权值\n",i);
        scanf("%d",&w0);
        w[i]=w0;
    }
    intilTree(w,n,ht,hc);
    printf("helloworld!\n");
    for(i=1;i<=m;i++){
        printf("%d   %d   %d  %d\n",ht[i].weight,ht[i].Llink,ht[i].Rlink,ht[i].Plink);
    }
}
如上的代码; 主要改一下一条代码语句的位置即可。即
    scanf("%d",&n);
    m=2*n-1;
m = 2 * n -1;需要放在scanf之后,不然,n是随机值(可能很大,导致输出时越界,出现楼主的停止运行),那么m = 2 * n -1也会变得很大; 所以,m = 2 * n -1需要放在scanf之后,这样n确定大小了,m的值也会确定大小了。
谢谢谢谢 牛逼牛逼!!!!!! 找了好久好久 都快崩溃了,原来问题出在这
自信男孩 2017-11-08
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
typedef struct huftree{
    int weight;
    int Plink,Llink,Rlink;
} *HFT,Tnode;
typedef struct hufcode{
    int star;
    int symbol;
    int bits[5];
} *HFC,Cnode;

void intilTree(int *w,int n,HFT ht,HFC hc){
    int i;
    for(i=1;i<n+1;i++){
        ht[i].Llink=0;
        ht[i].Plink=0;
        ht[i].Rlink=0;
        ht[i].weight=w[i];

    }
    for(;i<2*n;i++){
        ht[i].Llink=0;
        ht[i].Plink=0;
        ht[i].Rlink=0;
        ht[i].weight=0;
    }

}//intil
main(){
    HFT ht;
    HFC hc;
    int n;
    int *w;
    int i=0;
    int w0;
    int m;
    printf("shuru N\n");
    scanf("%d",&n);
    m=2*n-1;
    w=(int*)malloc((n+1)*sizeof(int));
    ht=(HFT)malloc((m+1)*sizeof(Tnode));
    hc=(HFC)malloc((n+1)*sizeof(Cnode));

    for(i=1;i<n+1;i++){
        printf("第%d个权值\n",i);
        scanf("%d",&w0);
        w[i]=w0;
    }
    intilTree(w,n,ht,hc);
    printf("helloworld!\n");
    for(i=1;i<=m;i++){
        printf("%d   %d   %d  %d\n",ht[i].weight,ht[i].Llink,ht[i].Rlink,ht[i].Plink);
    }
}
如上的代码; 主要改一下一条代码语句的位置即可。即
    scanf("%d",&n);
    m=2*n-1;
m = 2 * n -1;需要放在scanf之后,不然,n是随机值(可能很大,导致输出时越界,出现楼主的停止运行),那么m = 2 * n -1也会变得很大; 所以,m = 2 * n -1需要放在scanf之后,这样n确定大小了,m的值也会确定大小了。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧