Указатели на структуры, передаваемые в функцию - PullRequest
0 голосов
/ 26 октября 2011

Это урезанная версия моей программы.Мне нужно передать указатель на указатели структур на функцию, изменить структуры внутри функции и сохранить эти изменения.Объявление функции должно оставаться прежним.

В настоящее время я могу изменять данные в функции, но после возврата в главное изменения не были внесены.

Спасибо за помощь.

int main()
{
    struct node** HuffmanNodes;
    read_Huffman_encoded_data(&HuffmanNodes);
}

void read_Huffman_encoded_data(**HuffmanNodes)
{
    Huffman_node = (node**)malloc(sizeof(node*)*(*number_of_nodes));

    int index;
    for(index=0; index<*number_of_nodes;index++)
    {
        Huffman_node[index] = (node*)malloc(sizeof(node));
        Huffman_node[index]->first_value=1;
        Huffman_node[index]->second_value=2;
    }
}

Ответы [ 2 ]

1 голос
/ 26 октября 2011

У вас проблема с вводом указателя.Я удивлен, что он даже компилируется, поскольку &HuffmanNodes имеет тип node***.

Попробуйте это:

void read_Huffman_encoded_data(struct node ***HuffmanNodes)
{
    *Huffman_nodes = (node**)malloc(sizeof(node*)*(*number_of_nodes));

    int index;
    for(index=0; index<*number_of_nodes;index++)
    {
        (*Huffman_nodes)[index] = (node*)malloc(sizeof(node));
        (*Huffman_nodes)[index]->first_value=1;
        (*Huffman_nodes)[index]->second_value=2;
    }
}

У вас также есть некоторые несоответствия имен (которые я исправил), яНадеюсь, что это просто опечатки от удаления программы.

РЕДАКТИРОВАТЬ: Альтернативный метод

int main()
{
    struct node** HuffmanNodes = (node*)malloc(sizeof(node) * (*number_of_nodes));
    read_Huffman_encoded_data(HHuffmanNodes);
}

void read_Huffman_encoded_data(struct node **HuffmanNodes)
{
    int index;
    for(index=0; index<*number_of_nodes;index++)
    {
        Huffman_nodes[index] = (node*)malloc(sizeof(node));
        Huffman_nodes[index]->first_value=1;
        Huffman_nodes[index]->second_value=2;
    }
}
0 голосов
/ 26 октября 2011

Попробуйте это:

int main()
{
    struct node** HuffmanNodes;
    read_Huffman_encoded_data(&HuffmanNodes);
}

void read_Huffman_encoded_data(**HuffmanNodes)
{
    Huffman_node = (node*)malloc(sizeof(node)*(number_of_nodes));

    int index;
    for(index=0; index<*number_of_nodes;index++)
    {
        Huffman_node[index] = (node*)malloc(sizeof(node));
        Huffman_node[index]->first_value=1;
        Huffman_node[index]->second_value=2;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...