typedef struct {
int weight;
char ch;
int parent, lchild, rchild;
}HTNode, *HuffmanTree;
typedef char **HuffmanCode;
typedef struct {
HuffmanTree HT;
char *c;
int length;
HuffmanCode HC;
}Huffman;
上面这部分是我的结构体定义;
#include "head.h"
int main() {
Huffman Hfm;
char ch;
scanf("%c", &ch);
getchar();
while (ch != 'Q') {
if (ch == 'I') Hfm=InitHTree(Hfm);
else if (ch == 'E') EnHTree(Hfm);
else if (ch == 'D') DeHTree(Hfm);
else if (ch == 'P') PrintHTree(Hfm);
printf("\n------------------\n");
printf(" 初始化 I\n");
printf(" 编码 E\n");
printf(" 解码 D\n");
printf(" 打印代码文件 P\n");
printf(" 退出 Q\n");
printf("请选择服务:");
scanf("%c", &ch);
getchar();
}
return 0;
}
这是我的主函数部分,在visual stdio里报错说我在主函数里引用了未初始化的变量Hfm,但是我这样初始化:Hfm=(Huffman)malloc(sizeof(&huffman)) 仍然是报错,请问应该如何初始化呢?
Huffman *pHfm=(Huffman*)malloc(sizeof(huffman))
sizeof里面直接用数据结构名,malloc产生的是指针
也可以这样,给结构增加一个构造函数,这样就不需要专门初始化了
typedef struct Huff{
HuffmanTree HT;
char *c;
int length;
HuffmanCode HC;
Huff()
{
HT = NULL;
c = NULL;
length = 0;
HC = NULL;
}
}Huffman;
Hfm不是指针,Hfm=(Huffman)malloc(sizeof(&huffman)) 这样写是错误的。
代码如下:
#include <string>
Huffman Hfm;
memset(&Hfm,0,sizeof(Hfm));
而且,可能是Hfm里面的指针你没初始化。
HuffmanTree HT;
char *c;
这两个元素在使用之前都需要new一下,或者malloc一下。
//方法一:new
//Hfm.HT = new HTNode;
//Hfm.c = new char[1024]; //1024根据你的需要来调整
//方法二:malloc
Hfm.HT = (HuffmanTree)malloc(sizeof(HTNode));
Hfm.c = (char *)malloc(1024);
你这话报错应该不是第3行的报错,应该是Hfm=InitHTree(Hfm);执行的时候报错才对。单单看你的第三行没什么问题的。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632