Здравствуйте. Имеется код
Код:
#include <stdio.h>
#include <stdlib.h>
struct list {
char * s;
struct list * prev, * next;
} * a;
unsigned long int i;
char q;
int read()
{
i = 0;
char c;
while ((c = getchar()) == '\n')
{
(*a).s[i] = c;
i++;
}
(*a).s[i] = '\0';
return i;
}
void readlist()
{
a = malloc(sizeof(struct list));
a = NULL;
i = read();
//остальной код, до которого исполняющий файл не доходит
}
int main()
{
do
{
switch (z)
{
case 0: readlist(); break;
case 1: ; break;
case 2: ; break;
case 3: ; break;
case 4: ; break;
case 5: ; break;
case 6: ; break;
case 7: ; break;
case 8: ; break;
case 9: ; break;
case 10: ; break;
case 11: ; break;
}
}
while (z < 12);
return 0;
}
Компилируется нормально (Windows 10, Code::blocks, GCC). После запуска ввожу 0. После этого исполняющий файл вылетает на функции read() либо в месте, где стоит условие, либо где присваивание. В чём ошибка? Изначально вместо
Код:
(*a).s
стояло
Код:
a->s
, также было выделение памяти
Код:
(*a).s = malloc(sizeof(char) * 1000)
, вместо
Код:
c = getchar()
было
Код:
scanf("%c", &c)
. Три с лишним часа бьюсь, прога как вылетала, так и продолжает вылетать.