我正在C中尝试创建一个huffman解码器。这段代码只在codearray进入未初始化时才起作用,否则会给我一个分段错误。然而,valgrind抱怨说,如果我这样做的话,codearray是未初始化的。我用ddd进行了检查,一旦strcpy被调用,segmentaion错误就会发生,我不知道为什么。如果目标字符串未初始化,strcpy的行为会有所不同
void printtree_inorder(node* n,char* code,char* letarray,char** codearray)
{
if (n == NULL) {
return;
}
static int counter=0;
appenddigit(code,'0');
printtree_inorder(n -> left,code,letarray,codearray);
remdigit(code);
if (n->let!='\0') {
letarray[counter]=n->let;
strcpy(codearray[counter],code);
counter++;
}
appenddigit(code,'1');
printtree_inorder(n -> right,code,letarray,codearray);
remdigit(code);
}
下面是调用函数:
char code[100]={'\0'};
char** codearray=(char**)malloc(numchars*sizeof(char*));
for (i=0;i<numchars;i++) {
codearray[i]=(char*)malloc(100*sizeof(char));
}
char* letarray=(char*)malloc((numchars+1)*sizeof(char));
letarray[0]='\0';
printtree_inorder(root,code,letarray,codearray);
你也可以说做的分配和调用此函数 –
什么appenddigit和remdigit做的代码? – David
numchars的值是什么?也为什么你的柜台宣布静态? –