У меня есть статический массив, и в функции я создаю новую структуру в цикле и присваиваю ее каждому индексу в массиве. В функции я вижу значения, но в другой функции я вижу мусор для значений массива. Должен ли я использовать malloc для чего-то вроде этого?Назначение структур статическому массиву
struct file_types
{
char * typename;
char * MIMEtype;
};
static struct file_types *file_type_table; //Table of parameters
static int file_type_table_num=0;
int add_to_filetype_table(char *param, int param_len, char *value, int val_len, char* value2)
{ if ((param == NULL) || (value==NULL) || (value2 == NULL))
return 0;
if ((strcmp(param,"type") != 0) || (strcmp(value,"") == 0) || (strcmp(value2,"") == 0))
return 0;
if (file_type_table==NULL)
file_type_table = emalloc(sizeof(struct file_types));
else
file_type_table = erealloc(file_type_table, (file_type_table_num*sizeof(struct file_types)+ sizeof(struct file_types)));
file_type_table_num += 1;
int index = file_type_table_num -1;
struct file_types new_struct;
new_struct.typename = value;
new_struct.MIMEtype = value2;
file_type_table[index] = new_struct;
return 1;
}
Проблема в доступе к структур здесь:
char* get_table_value(char * key)
{ logg("In get_table_value");
int i;
char* value;
for (i=0;i<file_type_table_num;i++)
{
if (strcmp(((file_type_table)[i]).typename, key) == 0)
{
return (file_type_table[i]).MIMEtype;
}
}
return value;
}
Я установил new_struct (struct file_types * new_struct = emalloc (sizeof (struct file_types));), но я получаю ошибку сегментации, когда я делаю strcpy (new_struct-> typename, value). Если я только делаю «=», то у меня все еще есть оригинальная проблема. – user994165
@ user994165: Вам нужно также «malloc» добавлять элементы указателя на структуру ('typename' и' MIMEtype')! Если вы просто выделяете память на указатель структуры, а не на элементы указателя, то членам структуры недостаточно памяти для хранения строк, которые вы копируете, используя 'strcpy'. –