我正在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的值是什麼?也爲什麼你的櫃檯宣佈靜態? –