У меня есть назначение на C. Это намного длиннее, чем код, показанный ниже, и нам даны только прототипы функций и инструкции. Я сделал все возможное при написании кода, но я застрял с ошибками сегментации. Когда я компилирую и запускаю приведенную ниже программу в Linux, при «735 NaN» она прекращается, указывая на то, что произошла ошибка. Зачем? Что я делаю неправильно? По сути, программа не позволяет мне получить доступ к ключу table-> list_array [735] -> value и table-> list_array [735] ->. Это, конечно, первый сегмент. Может быть больше следующего индекса 735.
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
char *key;
int value;
list_node_t *next;
};
typedef struct count_table count_table_t;
struct count_table {
int size;
list_node_t **list_array;
};
count_table_t* table_allocate(int size)
{
count_table_t *ptr = malloc(sizeof(count_table_t));
ptr->size = size;
list_node_t *nodes[size];
int k;
for(k=0; k<size; k++){
nodes[k] = NULL;
}
ptr->list_array = nodes;
return ptr;
}
void table_addvalue(count_table_t *table)
{
int i;
for(i=0; i<table->size; i++)
{
table->list_array[i] = malloc(sizeof(list_node_t));
table->list_array[i]->value = i;
table->list_array[i]->key = "NaN";
table->list_array[i]->next = NULL;
}
}
int main()
{
count_table_t *table = table_allocate(1000);
table_addvalue(table);
int i;
for(i=0; i<table->size; i++)
printf("%d %s\n", table->list_array[i]->value, table->list_array[i]->key);
return 0;
}