Ошибка сегмента при назначении экземпляра структуры? - PullRequest
0 голосов
/ 14 февраля 2011
struct queens_arg {
  int board[64]; 
  int focus_idx;
};

struct queens_arg *args;
(*args).focus_idx = 0;

Код следующий.Я получаю ошибку сегмента (отлаженную) при установке focus_idx = 0.Почему это происходит?Как я могу это исправить?Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 февраля 2011

Проблема в том, что вы создаете указатель на struct queens_arg, но не инициализируете его, чтобы указывать куда-либо.Следовательно, когда вы пишете

(*args).focus_idx = 0;

Вы следуете за указателем мусора, вызывая segfault во время выполнения.

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

struct queens_arg* args = malloc(sizeof (struct queens_arg));

В связанной заметке вам не нужно писать

(*args).focus_idx = 0;

Вместо этого вы можете использовать эту сокращенную запись:

args->focus_idx = 0;

Это означает то же самое, но немного легче для чтения.

2 голосов
/ 14 февраля 2011

Это происходит потому, что вы использовали указатель, но ничего не выделяли. Следовательно, вы пишете в память, которая не ваша.

Сначала вы должны выделить args следующим образом:

struct queens_arg *args = malloc(sizeof(struct queens_arg));

Тогда вам следует проверить, если args != NULL. Если нет, вы можете записать в только что выделенную память, используя:

args->focus_idx = 0;
0 голосов
/ 14 февраля 2011

Вы только что объявили указатель на queens_arg структуру, никакой структуры на самом деле не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...