huff_node *(int,int)' differs in levels of indirection from 'int ()'

LVMJIE 2016-04-25 10:28:07
求助!!

//huffman K叉

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <string.h>

//**************树的 结构*****************
typedef struct
{
char letter;
int rate;
int flag;
}Value;

typedef struct
{
Value weight;
int parent;
int child[];
}huff_node;

typedef struct
{
int rate;//记录字符出现次数 主要用来判断是否第一次出现
int pos;//记录字符在 huffmanT中的位置
}flag;
//**************编码的结构****************
typedef struct
{
char ch;
char bit[96];
}codenode;

//codenode huffman_code[n];//编码 数组
int n = 0;//huffman数组游标
flag rate[95] = { -1 };//存储字符出现概率
char letter[95];//‘\0填充’ 存储字符
huff_node * huffmanT[189];

//***1***遍历文章,计算可打印的字符的权值
void new_huffmanT(int k)
{
FILE *fp;
int ch;
fp = fopen("Article.txt", "rt");
ch = fgetc(fp);
while (ch != EOF)
{
if (rate[ch - ' '].rate == -1)//第一次出现
{
huffmanT[n] = create_huffnode(k,ch);
rate[ch - ' '].rate = 1;
rate[ch - ' '].pos = n;
n++;
}
else//出现过
{
rate[ch - ' '].rate++;
huffmanT[rate[ch - ' '].pos]->weight.rate++;
}
//读下一字符
ch = fgetc(fp);
}
fclose(fp);
}


huff_node *create_huffnode(int k,int ch)
{
huff_node *p = (huff_node *)malloc(sizeof(huff_node) + k*sizeof(int));
p->weight.flag = 0;//查找最小 k 个rate值时使用
p->weight.rate = 1;//rate值
p->weight.letter = ch ;
p->parent = -1;
int i;
for (i = 0; i < k; i++)
111
p->child[i] = -1;
}
return p;
}


int main()
{
int m;
int k;
printf("请输入huffman树的叉数");
scanf("%d", &k);
new_huffmanT(k);
getchar();
return 0;
}
...全文
109 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-04-26
  • 打赏
  • 举报
回复
这样就没有编译错误了,但是没有Article.txt没法继续帮楼主调试了

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <string.h>
#include <stdlib.h>



//**************树的 结构*****************
typedef struct
{
	char letter;
	int  rate;
	int  flag;
}Value;

typedef struct
{
	Value weight;
	int parent;
	int *child;
}huff_node;

typedef struct
{
	int rate;//记录字符出现次数 主要用来判断是否第一次出现
	int pos;//记录字符在 huffmanT中的位置
}flag;
//**************编码的结构****************
typedef struct
{
	char ch;
	char bit[96];
}codenode;

huff_node *create_huffnode(int k,int ch);

//codenode huffman_code[n];//编码 数组
int n = 0;//huffman数组游标
flag  rate[95] = { -1 };//存储字符出现概率
char letter[95];//‘\0填充’  存储字符
huff_node * huffmanT[189];

//***1***遍历文章,计算可打印的字符的权值
void new_huffmanT(int k)
{
	FILE *fp; 
	int ch;
	fp = fopen("Article.txt", "rt");
	ch = fgetc(fp);
	while (ch != EOF)
	{
		if (rate[ch - ' '].rate == -1)//第一次出现
		{
			huffmanT[n] = create_huffnode(k,ch);
			rate[ch - ' '].rate = 1;
			rate[ch - ' '].pos = n;
			n++;
		}
		else//出现过
		{
			rate[ch - ' '].rate++;
			huffmanT[rate[ch - ' '].pos]->weight.rate++;
		}
		//读下一字符
		ch = fgetc(fp);
	}
	fclose(fp);
}


huff_node *create_huffnode(int k,int ch)
{
	huff_node *p = (huff_node *)malloc(sizeof(huff_node) + k*sizeof(int));
	p->weight.flag = 0;//查找最小 k 个rate值时使用
	p->weight.rate = 1;//rate值
	p->weight.letter = ch ;
	p->parent = -1;
	int i;
	for (i = 0; i < k; i++)
		p->child[i] = -1;
return p;
}


int main()
{
	int m;
	int k;
	printf("请输入huffman树的叉数");
	scanf("%d", &k);
	new_huffmanT(k);
	getchar();
	return 0;
}
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

69,382

社区成员

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

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