calloc 导致段错误

Calloc causes segmantation fault

我正在尝试在我的结构数组的结构中添加一组字符串。我在 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;

有问题的代码是这段代码

varlist.vars[index].called = (char *)calloc(1, sizeof(char) * strlen(var.called));
strcpy(varlist.vars[index].called, var.called);

您正在使用旨在处理字符串的函数(如 strlenstrcpy),但分配的字符数组不包含字符串,因为它们没有为终止保留 space零字符 '[=14=]'.

你至少要写得像

varlist.vars[index].called = calloc( strlen(var.called) + 1, sizeof(char) );

其中var.called还必须包含一个字符串。

所以还要检查指针var.called指向的字符串形成的代码。