Reputation: 2638
I have defined a "car" struct with a model (char *model) and the year of the model (int year). I have a function that will create a new car struct; however, it is seg faulting when copying the char pointers. This is supposed to create a new node for a linked list.
Car *newCar(char *model, int year){
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(MAX_LENGTH*sizeof(char));
strcpy(new->model, model);
new->next = NULL;
return new;
}
Upvotes: 9
Views: 23572
Reputation: 2638
For future reference this function fixed my issue...
Car *createCar(char *model, int year){
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(strlen(model)+1);
strcpy(new->model, model);
new->next = NULL;
return new;
}
Upvotes: 7
Reputation: 6228
You may try this :
new->model = model == NULL ? NULL : strdup(model);
this prevents you from a bug if model is NULL, else malloc you the exact amount of space and strcopy it; plus, this allows you to free(new->model)
at the end in all the cases.
Upvotes: 4
Reputation: 5836
Have a look at the code below and compare it with your program, am sure you will find out what's wrong with your program
#include <stdio.h>
#include <string.h>
typedef struct car{
char *model;
int year;
}Car;
Car * newCar(char *, int );
int main()
{
Car *benz = newCar("S-class",1990);
printf("\nModel = %s\n",benz->model);
printf("\nYear = %d\n",benz->year);
}
Car * newCar(char *model, int year)
{
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(strlen(model));
strcpy(new->model, model);
return new;
}
Upvotes: 2
Reputation: 987
Here your model is character pointer.
But strcpy requires two arguments - that should be array
or character pointer to which memory allocated by malloc or calloc
But your strcpy();
takes one argument as character pointer which will not be accepted.
so make
new->model = malloc(strlen(model) + 1)
and then write your strcpy
()
it will work.
Upvotes: 4