Reputation: 45
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;
Upvotes: 2
Views: 83
Reputation: 311058
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.
Upvotes: 2