Home > Software engineering >  Calloc causes segmantation fault
Calloc causes segmantation fault

Time:05-11

I am trying to add a set a string in my struct array's struct. I coded this in Macos using gcc (not clang) and works fine but when i import my code to Windows this calloc causes segmantation fault.

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);

this is my structs definitation

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;

CodePudding user response:

The problematic code is this code snippet

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

You are using functions designed to deal with strings (like strlen and strcpy) but the allocated character arrays do not contain strings because they do not reserve space for the terminating zero character '\0'.

You have to write at least like

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

wherein var.called also must contain a string.

So check also the code where the string pointed to by the pointer var.called is formed.

  • Related