Я пытаюсь создать матрицу узлов для сохранения значения int, которое изменяется в каждой итерации в зависимости от его соседей, поэтому я решил, что у меня должна быть структура "Node", которая сохраняет его значение, и список узлов, которыеуже близко, но при компиляции я получаю следующее предупреждение при назначении узла списку:
предупреждение: назначение из несовместимого типа указателя [-Wincompatible-pointer-types] n -> соседей [0]= таблица [M - 1] [N - 1];
Это предупреждение приводит к тому, что мои узлы не инициализируются, что вызывает ошибку сегментации, когда я пытаюсь получить доступ к любой переменной внутри моей структуры (Я думаю, потому что это NULL).
Вот мой код, надеюсь, вы можете помочь мне с этим
...
typedef struct node {
int state;
struct Node** neighbours;
} Node;
Node* node_init(int i, int j, int M, int N, Node*** table) {
Node* n = malloc(sizeof(Node));
n -> state = -1;
n -> neighbours = malloc(sizeof(Node*)*8);
if (i == 0 && j == 0) { // (0, 0)
n -> neighbours[0] = table[M - 1][N - 1]; // Here is the problem
n -> neighbours[1] = table[M - 1][j];
n -> neighbours[2] = table[M - 1][j + 1];
n -> neighbours[3] = table[i][N - 1];
n -> neighbours[4] = table[i][j + 1];
n -> neighbours[5] = table[i + 1][N - 1];
n -> neighbours[6] = table[i + 1][j];
n -> neighbours[7] = table[i + 1][j + 1];
} ... // for all cases
return n;
Node*** table = malloc(sizeof(Node**)*M); // M is the amount of rows
for (int i=0; i < M; i++) {
Node** nodes = malloc(sizeof(Node*)*N); // N is the amount of cols
table[i] = nodes;
for (int j=0; j < N; j++) {
Node* node = node_init(i, j, M, N, table); // wont reach here
table[i][j] = node;
fscanf(fp, "%i", &(node -> state)); // ain't relevant
}
}
...
Я знаю, что в первый раз я
n -> neighbours[0] = table[M - 1][N - 1]
Я присваиваю случайное значение, на которое указывает эта позиция таблицы, но я не думаю, что это проблема, верно?
В любом случае, надеюсь, вы поможете мне
Спасибо:)