gpt4 book ai didi

c - 霍夫曼 C 无限循环

转载 作者:行者123 更新时间:2023-11-30 16:27:05 26 4
gpt4 key购买 nike

我有这个霍夫曼代码,旨在返回数组中每个字母的霍夫曼代码并按字母顺序打印它们。问题是它不生成任何输出,而是继续处理,直到我手动退出它。谁能帮我找出错误吗?我认为我的代码是正确的,但我不知道无限循环从何而来。

void buildHuffmanTree(char arr[], int freq[]){
int top = 0;
for (int i=0;i<strlen(arr);i++){
push(PQ,newNode(arr[i],freq[i]));
}
for (int i=0; i<qTop;i++){
struct node* node2 = newNode('!',0);
node2->left = pop(PQ);
node2->right = pop(PQ);
struct node* nodeL=node2->left;
struct node* nodeR=node2->right;
node2->frequency = nodeL->frequency + nodeR->frequency;
push(PQ,node2);
}
struct node* root= pop(PQ);
printCodes(root,arr2,top);
}

int main(){

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
int freq[] = { 5, 9, 12, 13, 16, 45 };

buildHuffmanTree(arr,freq);

return 0;
}

我期待的输出是这样的。但它只是继续运行,而不输出任何内容。我确信它正确地将值插入 PQ,所以我不知道我的错误在哪里。

a: 1100
b: 1101
c: 100
d: 101
e: 111
f: 0

对此我将不胜感激任何建议。谢谢。

最佳答案

这里有一个大问题:

for (int i=0;i<strlen(arr);i++){
// ^^^^^^^^^^^

strlen函数期望参数是指向空终止字节字符串的第一个字符的指针。

您的字符数组不是一个以空字符结尾的字符串,这意味着strlen函数在尝试查找终止符时将超出范围。出界会导致undefined behavior .

一个简单的解决方案是使用文字字符串作为数组的初始值设定项:

char arr[] = "abcdef";  // Make arr a null-terminated string

另一个也许更通用的解决方案是将数组的长度传递给需要它的函数,并使用该参数。

关于c - 霍夫曼 C 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52892651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com