Segfault при копировании структуры - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующая структура:

extern struct team_t
{
    char *name1;
    char *email1;
    char *name2;
    char *email2;   
} team;

struct team_t team =
{
    "some string1",
    "some string2",
    "some string3",
    "some string4"
};

Затем в другом файле я создаю следующую функцию, которая копирует эту структуру в новую структуру:

void *ucase( struct team_t *team)
{
  struct team_t *ucase_team = malloc( sizeof *ucase_team);

  memcpy ((char*)ucase_team, (char *)team, sizeof (ucase_team));

  return NULL;
}

Однако, когда я хочу позвонить ucase(team), у меня возникает ошибка. Мне нужно использовать void *, потому что это будет позже использоваться для сигналов оболочки. Чего мне не хватает?

Обновление: следующий вызов дает type argument of unary ‘*’ (have ‘struct team_t’) ошибка:

ucase(*team)

Обновление 2: я удалил Null return и использовал ucase(team), но все еще получаю segfault.

1 Ответ

0 голосов
/ 13 сентября 2018

Последний аргумент memcpy() должен быть sizeof(struct team_t) вместо sizeof (ucase_team), поскольку ucase_team является переменной указателя структуры.Это может быть либо sizeof(*ucase_team), либо sizeof(struct team_t).

Также вызывается функция team(), такая как

ucase(*team);

, так как team не является переменнойтипа указателя, это нормальная структурная переменная.Вероятно, вы хотите

ucase(&team);

...