ハフマンデコーダーを作成しようとしてCで作業しています。このコードは、codearray が初期化されていない場合にのみ機能します。それ以外の場合は、セグメンテーション エラーが発生します。ただし、そのようにすると、valgrind は codearray が初期化されていないと文句を言います。私はdddでそれを経験しましたが、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);