С этой строкой
struct ELEMENT *e = (struct ELEMENT*)malloc(numOfNodes * sizeof(struct ELEMENT));
вы не просто выделяете память для переменной struct ELEMENT
, но создаете массив размером 3 и набираете struct ELEMENT
.
Но, как я понимаю, по вашему коду вы хотите создать список и добавить переменную e
. Это можно сделать вот так
struct ELEMENT **List = malloc(numOfNodes * sizeof(struct ELEMENT*)); //This allocate memory for 3 pointers, List[i] is type struct ELEMENT *
После того, как вы можете выделить память для каждого указателя следующим образом
int i;
for(i = 0; i < numOfNodes; i++)
{
List[i] = malloc(sizeof(struct ELEMENT)); //here allocate memory for each pointer, for now each List[i] is type struct ELEMENT
}
То есть можно изменить объявление e
на struct ELEMENT *e = malloc(sizeof(struct ELEMENT));
и используйте e
как хотите, например
e->adjList = NULL;
e->edge = 5;
e->key = 15;
И добавить его к List
List[i] = e;
Если вы просто хотите, чтобы указатель ссылался на переменную e
, вы можете использовать struct ELEMENT **List = &e;
или более простой struct ELEMENT *p_elem = e;
. Таким образом, вы можете использовать эти указатели для изменения значения e
членов.
Не забудьте free
память, которая была выделена ранее.
Надеюсь, это решит все ваши выводы.