Ошибка сегментации с указателями в C ++ - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь построить объект структуры, но получаю ошибку сегментации при назначении значений.После того, как я построю объект, он будет передан указателем в список.Вот моя реализация:

struct clientInfo {
  int client, a, b;
};
List *info=new List();

void thread(int which) {
  clientInfo *cI;
  cI->client=which;
  cI->a=4;
  cI->b=5;
  info->Append(cI);
}

Во время выполнения 'cI-> client = which' возникает ошибка сегментации.Этот проект пишется на платформе nachos для всех, кто знаком, однако определение List во многом совпадает с определением любого связанного списка в C ++.Для тех, кто не знаком с nachos, 'void thread' - это мое 'int main'.

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 27 марта 2012

clientInfo *cI; объявляет указатель на объект типа clientInfo. Он не создает этот объект. Вы должны создать его, прежде чем пытаться получить доступ к его членам: cI = new clientInfo();.

2 голосов
/ 27 марта 2012

Указатель cI на самом деле указывает «нигде не значащий для вас», когда назначаются члены ci -> . Инициализируйте указатель на что-то существующее (или выделите что-то для него) перед его использованием.

2 голосов
/ 27 марта 2012

Вы должны создать clientInfo *cI, как

clientInfo *cI = new clientInfo();
1 голос
/ 28 марта 2012

Вы не можете напрямую присваивать значения указателю на структуру. Он должен быть выделен с использованием нового типа:

 clientInfo *cI =new  clientInfo();

Если вы не хотите этого делать, просто удалите объект вместо указателя * cI.как показано ниже:

clientInfo cI;

Теперь вы можете напрямую назначать значения, например cI.a=..., и эти данные будут обрабатываться в стеке, а не в куче.

...