Я имел эту строку кода:собственно таНос ошибка фиксации
conf->table = malloc(sizeof(struct Categorie)*(csv_nbLines(filename)));
, что привело к ошибке при вызове free()
на conf
, потому что struct Categorie
включать строку (массив char
с).
Я исправил ошибку, заменив sizeof(struct Categorie)
на 30
, потому что я знаю, что указанная строка не будет содержать более 30 байт.
Это приемлемо? Если бы не то, что было бы лучшим способом для malloc
точного объема памяти?
EDIT:
struct Categorie {
char *name;
char c;
};
EDIT2:
Я заканчиваю с этим, и он прекрасно работает (названия говорят сами за себя).
в conf_init()
conf->table = malloc(sizeof(struct Categorie))
в conf_load()
где pch
является строка, возвращаемая strtok()
conf->table[i].name = malloc(sizeof(char)*strlen(pch));
conf->table[i].name = pch;
Я надеюсь, что это достаточно объяснение для следующего одного :)
вы можете попробовать 'free (conf-> table)' вместо этого. – Ishmeet
Пожалуйста, покажите определение 'Categorie'; возможно, что ваше исправление не связано с реальной проблемой. – Codor
RE: Обновление: 1) Сделать это 'conf-> table [i] .name = malloc (1 + strlen (pch));' [sizeof (char) равно 1, по определению дополнительный символ необходим для завершения NUL] 2) 'conf-> table [i].name = pch; 'Вы не можете скопировать строки по назначению, используйте strcpy() или memcpy() или, в этом случае strdup() – joop