Я пытаюсь добавить набор строк в структуру моего массива структур. Я закодировал это в Macos, используя gcc (не clang), и работает нормально, но когда я импортирую свой код в Windows, этот calloc вызывает ошибку сегментации.
index = varlist.var_count;
varlist.var_count++;
varlist.vars = (Var *)realloc(varlist.vars, sizeof(Var) * varlist.var_count);
varlist.vars[index].called = (char *)calloc(1, sizeof(char) * strlen(var.called));
strcpy(varlist.vars[index].called, var.called);
это определение моей структуры
struct Var
{
int id;
char * called;
void * ptr;
int type;
};
typedef struct Var Var;
struct Varlist
{
int var_count;
Var * vars;
};
typedef struct Varlist Varlist;
🤔 А знаете ли вы, что...
C оставался популярным и актуальным языком программирования на протяжении многих десятилетий.
Проблемный код - это фрагмент кода
varlist.vars[index].called = (char *)calloc(1, sizeof(char) * strlen(var.called));
strcpy(varlist.vars[index].called, var.called);
Вы используете функции, предназначенные для работы со строками (например, strlen
и strcpy
), но выделенные массивы символов не содержат строк, потому что они не резервируют место для завершающего нулевого символа '\0'
.
Вы должны написать хотя бы лайк
varlist.vars[index].called = calloc( strlen(var.called) + 1, sizeof(char) );
где var.called
также должен содержать строку.
Поэтому проверьте также код, в котором формируется строка, на которую указывает указатель var.called
.