структура ошибки сегментации - PullRequest
0 голосов
/ 19 декабря 2009

У меня есть структура с именем table, я просто хочу создать таблицу, как конструктор в Java, но когда я вызываю эту функцию в main, это дает ошибку сегментации

struct table *create(char *name,int number,char *s_name)
{
  struct table *newTable;
  newTable->name = name;
  newTable->number = number;
  newTable->s_name = s_name;
  return newTable;
}

Ответы [ 4 ]

10 голосов
/ 19 декабря 2009
struct table *newTable = malloc(sizeof(struct table));

Не забывайте звонить бесплатно, когда вы закончите, используя его, поскольку у C нет сборщика мусора, как у java.

8 голосов
/ 19 декабря 2009

Вы не распределили память для объекта и разыменовываете поля структуры. Вам нужно использовать malloc для выделения памяти для newTable перед доступом к ней

0 голосов
/ 19 декабря 2009

Попробуйте:

struct table *create(char *name,int number,char *s_name)
{
  struct table *newTable = malloc(sizeof(*newTable));
  if (!newTable)
    return NULL;

  newTable->name = name;
  newTable->number = number;
  newTable->s_name = s_name;
  return newTable;
}

Еще одно предостережение: в этом коде newTable->name просто указывает на предоставленный name, копия не создается. Это может быть не то, что вы хотите, но это трудно понять из этого небольшого фрагмента. Альтернативой является дублирование имени. То же самое касается s_name.

0 голосов
/ 19 декабря 2009

вы пытаетесь получить доступ к нераспределенной / неинициализированной памяти, и SIGSEGV (ошибка сегментации) в порядке для кода, если вы не выделяете память явно, используя malloc или другие методы выделения памяти.

...