我无法将数组分配给结构内的数组
I cant assign an array to a array inside of my structure
我在做霍夫曼作业时无意中发现了一件我无法理解为什么会发生的小事。
所以我创建了一个结构,它有一个 int 数组、一个 char 和一个保存数组大小的 int。
struct kodlar{
char karakter;
int* code;
int codesize;
};
typedef struct kodlar kodlar;
kodlar* yenikod(char karakter, int* code,int codesize){
kodlar* yenikod = (kodlar*)malloc(sizeof(kodlar));
if(yenikod){
yenikod->karakter = karakter;
yenikod->code = code;
yenikod->codesize = codesize;
}
return yenikod;
}
然后在我的 main 中,我创建了一个包含这些结构的数组:
kodlar* K[taille];
taille 是要存储的字符数。
为了把字符和代码对应起来,我创建了函数
printCodes(HuffTree,arr,top,&p,K);
它是这样工作的:
void printCodes(node* root, int arr[], int top,int* i,kodlar** K)
{
if (root->left) {
arr[top] = 0;
printCodes(root->left, arr, top + 1,i,K);
//printf("%c\n",'l');
}
if (root->right) {
arr[top] = 1;
printCodes(root->right, arr, top + 1,i,K);
//printf("%c\n",'r');
}
if (isLeaf(root)) {
printArr(arr,top);
K[*i]=yenikod((root->lettre),arr,top);
*i = *i + 1;
//printArr(K[*i]->code,K[*i]->codesize);
//printf("%i en son if te i \n",*i );
}
}
但我似乎无法将数组存储在我的 kodlar 结构数组中。如果我注释掉各方 //printArr(K[*i]->code,K[*i]->codesize);它给了我一个分段错误,如果我尝试这样打印:
for (int i = 0; i < taille; ++i){
printf("%c :", K[i]->karakter);
printf(" ");
printArr(K[i]->code,K[i]->codesize);
printf("\n");
}
它给了我代码,但只有 1。我被困在这个问题上已经 2 天了,如果有人能帮助我,我将不胜感激。
struct kodlar{
char karakter;
int codesize;
int code[50];
};
typedef struct kodlar kodlar;
kodlar* yenikod(char karakter, int* code,int codesize){
kodlar* yenikod = (kodlar*)malloc(sizeof(kodlar));
if(yenikod){
yenikod->karakter = karakter;
yenikod->codesize = codesize;
for (int i = 0; i < codesize; ++i)
{
yenikod->code[i] = code[i];
}
}
return yenikod;
}
感谢@wcochran,我了解到问题出在我的结构中,但 memcpy 无法处理我的代码,我已经给出了一个在进入 yenikod 之前已经分配的数组。我在 kodlar 结构中给了我的代码数组一个大小,我的问题就解决了。
我在做霍夫曼作业时无意中发现了一件我无法理解为什么会发生的小事。 所以我创建了一个结构,它有一个 int 数组、一个 char 和一个保存数组大小的 int。
struct kodlar{
char karakter;
int* code;
int codesize;
};
typedef struct kodlar kodlar;
kodlar* yenikod(char karakter, int* code,int codesize){
kodlar* yenikod = (kodlar*)malloc(sizeof(kodlar));
if(yenikod){
yenikod->karakter = karakter;
yenikod->code = code;
yenikod->codesize = codesize;
}
return yenikod;
}
然后在我的 main 中,我创建了一个包含这些结构的数组:
kodlar* K[taille];
taille 是要存储的字符数。 为了把字符和代码对应起来,我创建了函数
printCodes(HuffTree,arr,top,&p,K);
它是这样工作的:
void printCodes(node* root, int arr[], int top,int* i,kodlar** K)
{
if (root->left) {
arr[top] = 0;
printCodes(root->left, arr, top + 1,i,K);
//printf("%c\n",'l');
}
if (root->right) {
arr[top] = 1;
printCodes(root->right, arr, top + 1,i,K);
//printf("%c\n",'r');
}
if (isLeaf(root)) {
printArr(arr,top);
K[*i]=yenikod((root->lettre),arr,top);
*i = *i + 1;
//printArr(K[*i]->code,K[*i]->codesize);
//printf("%i en son if te i \n",*i );
}
}
但我似乎无法将数组存储在我的 kodlar 结构数组中。如果我注释掉各方 //printArr(K[*i]->code,K[*i]->codesize);它给了我一个分段错误,如果我尝试这样打印:
for (int i = 0; i < taille; ++i){
printf("%c :", K[i]->karakter);
printf(" ");
printArr(K[i]->code,K[i]->codesize);
printf("\n");
}
它给了我代码,但只有 1。我被困在这个问题上已经 2 天了,如果有人能帮助我,我将不胜感激。
struct kodlar{
char karakter;
int codesize;
int code[50];
};
typedef struct kodlar kodlar;
kodlar* yenikod(char karakter, int* code,int codesize){
kodlar* yenikod = (kodlar*)malloc(sizeof(kodlar));
if(yenikod){
yenikod->karakter = karakter;
yenikod->codesize = codesize;
for (int i = 0; i < codesize; ++i)
{
yenikod->code[i] = code[i];
}
}
return yenikod;
}
感谢@wcochran,我了解到问题出在我的结构中,但 memcpy 无法处理我的代码,我已经给出了一个在进入 yenikod 之前已经分配的数组。我在 kodlar 结构中给了我的代码数组一个大小,我的问题就解决了。