int main(int argc, char** argv) {
// Set up socket stuff
Server *server; // Set up the server
memset(server, 0, sizeof(Server));
Это неверно.Здесь вы просите memset
обнулить память, на которую указывает server
.Вызов memset
правильный, указатель server
- нет.Эта строка:
Server *server;
Выделяет память и дает указатель, но не выделяет память для объекта, на который указывает указатель, и не дает указателю начальное значение.Таким образом, после этой строки указатель просто указывает на какое-то случайное место в памяти.(Возможно, он использует то, что осталось в ОЗУ). Мы еще не присвоили ему допустимое значение, поэтому нельзя передавать его в memset
.
Теперь нам нужно дать ему действительное значение.значение.Вы можете либо:
1) выделить Server
в стеке, просто сказав:
Server server;
memset(&server, 0, sizeof(server));
2) выделить Server
динамически, используя malloc
:
Server *server = malloc(sizeof(*server));
// Check for NULL, which means malloc failed.
(Также обратите внимание на использование sizeof
- использование имени переменной вместо типа позволит sizeof
настроить, если вы когда-либо измените тип переменной.)
Возможно, вы захотите найти и просмотреть базовый учебник по указателям.Это довольно классическая ошибка для человека, который только что включил указатели в первый раз, так что не расстраивайтесь.