Так... Ты вродь пытаешься работать с динамическим списком, но не инициализируешь его head. Из-за этого при первом обращении к head происходит ошибка, т.к он указывает в никуда. Добавь строку для выделения памяти под двумерный массив matrix, и перед началом работы со списком добавь инициализацию head значением nil (для того, чтоб было понятно, что список пустой), не?