Я думаю, что теперь этот вопрос получил множество ответов, но я все еще смущен, и я делаю странные вещи с указателями, поэтому я очень благодарен вам за помощь. Я хочу создать массив (неизвестный размер), который содержит связанные списки. Я думаю, что основными проблемами являются использование указателями в этом контексте. Пожалуйста, обратите внимание:C - Массив, содержащий связанные списки
int x_format;
int y_format;
typedef struct{
int id;
struct item_node *next;
union{
struct{
int freq
} Sound;
struct{
float reduce;
} Obstacle;
} data;
}item_node;
item_node *buffer;
item_node **room;
item_node **room_new;
void createRoom(int x, int y)
{
buffer = malloc(sizeof(item_node)*x*y);
room = malloc(sizeof(item_node *)*y);
for(int i = 0; i<y; i++)
room[i] = &buffer[i*x];
for(int j = 0; j<x; ++j)
{
for(int k = 0; k<y; ++k)
{
room[j][k].next = NULL;
}
}
}
item_node createItem (int x, int y, int id)
{
item_node selected = room[x][y];
//Error
if(selected == NULL)
selected = malloc(sizeof(item_node));
else{
while(selected->next != NULL)
selected = selected->next;
selected->next = malloc(sizeof(item_node));
selected = selected->next;
}
selected->id = id;
selected->next = NULL;
return selected;
}
int main (int argc, char *argv[])
{
x_format = 100;
y_format = 100;
createRoom(x_format,y_format);
item_node itemtest = createItem(1,1,0);
free(room);
free(buffer);
}
Таким образом, проблема, которая возникает в:
error: invalid operands to binary expression ('item_node' and 'void *') if(selected == NULL)
Я понимаю ошибку, но я сейчас не как исправить это. Извините, если этот вопрос - путь к тривиальному, и я ценю любую помощь! Спасибо.
Тип 'selected' не указатель. BTW 'typedef struct {' shuould be 'typedef struct item_node {' – BLUEPIXY