2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 СИ: чтение строки в функции посимвольно
Сообщение02.12.2017, 18:33 


14/03/16
28
Здравствуйте. Имеется код
Код:
#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)
. Три с лишним часа бьюсь, прога как вылетала, так и продолжает вылетать.

 Профиль  
                  
 
 Re: СИ: чтение строки в функции посимвольно
Сообщение02.12.2017, 18:39 
Заслуженный участник


20/08/14
11057
Россия, Москва
А это вот зачем?!
Код:
    a = NULL;
Получили указатель на память и сразу же его обнулили, но память по нулевому адресу вам не принадлежит и писать туда нельзя.

 Профиль  
                  
 
 Re: СИ: чтение строки в функции посимвольно
Сообщение02.12.2017, 19:06 


14/03/16
28
Dmitriy40 в сообщении #1271132 писал(а):
А это вот зачем?!
Код:
    a = NULL;
Получили указатель на память и сразу же его обнулили, но память по нулевому адресу вам не принадлежит и писать туда нельзя.

Хорошо, обнуление убрал. Но программа вылетает, при всех тех же случаях, о которых я писал.

-- 02.12.2017, 21:10 --

Dmitriy40 в сообщении #1271132 писал(а):
А это вот зачем?!
Код:
    a = NULL;
Получили указатель на память и сразу же его обнулили, но память по нулевому адресу вам не принадлежит и писать туда нельзя.

хотя, добавил
Код:
(*a).s = malloc(sizeof(char) * 1000)
и она заработала. Спасибо большое!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group