Calloc вызывает ошибку сегментации

Я пытаюсь добавить набор строк в структуру моего массива структур. Я закодировал это в 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 оставался популярным и актуальным языком программирования на протяжении многих десятилетий.


1
36
1

Ответ:

Решено

Проблемный код - это фрагмент кода

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.