Форум программистов, компьютерный форум, киберфорум
Наши страницы

С под Linux

Войти
Регистрация
Восстановить пароль
 
_alexey
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 24
#1

При получения пакета возникает ошибка "Segmentation Fault" - C Linux

15.07.2013, 20:56. Просмотров 822. Ответов 3
Метки нет (Все метки)

Добрый день! Учился отправлять структуру по сети, натолкнулся на глюк.
Если комментирую/удаляю выделенные комментариями строчки, после получения пакета пишет Segmentation Fault.
Если оставляю - всё нормально.
В чем проблема? Пользовался geany, попробовал собрать из терминала gcc name.c -o name, эффект тот же.
Пробовал создавать новый файл, собирать сразу без этих двух переменных - Segmentation Fault.
При этом появляется предупреждение, что переменные не используются, если я их не удаляю/не комментирую.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
 
#define BUFLEN 1024
 
int main() {
    
    struct message {
        int number;
        char text[14];
    } *msg;
    
    int sock;
    struct sockaddr_in addr;
    char buf[BUFLEN];
    int intes = sizeof(int); //Почему это нельзя удалить?
    int i;
    int size_of_packet=0;  //Не удаляется!
    ssize_t bytes_read=0;
    
    sock=socket(AF_INET,SOCK_DGRAM,0);  
    addr.sin_family=AF_INET;
    addr.sin_port=htons(3333);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
    
    bind(sock, (struct sockaddr *)&addr, sizeof(addr));
 
    socklen_t addr_size=sizeof(addr);
    
    bytes_read=recvfrom(sock,buf,BUFLEN,0,(struct sockaddr*)&addr,&addr_size);
    buf[bytes_read]='\0';
    
    memcpy(&msg->number, buf, sizeof(int));
    memcpy(&msg->text, buf+sizeof(int), (ssize_t)msg->number);
    
    printf("%d bytes read\n",(int)bytes_read);
    printf("%d - number\n",msg->number);
    
    msg->text[14]='\0';
    for (i=0; i<msg->number;i++)    {
        putchar(msg->text[i]);
    }
    close(sock); 
    return 0;
}
Добавлено через 6 минут
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Добавлено через 4 минуты
Если закомментить последний цикл for, то снова после получения сообщения сразу появляется Segmentation Fault.
О_О
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 20:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос При получения пакета возникает ошибка "Segmentation Fault" (C Linux):

Перезаписать все строки, короче i из одного файла в другой и ошибка "Segmentation fault (core dumped)" - C Linux
Программа перезаписывает все строки, короче i из одного файла в другой. При запуске появляется Segmentation fault (core dumped). В чем...

Segmentation fault - C Linux
После введения размерности программа выдает ошибку Segmentation fault. Помогите исправить #include &lt;stdio.h&gt; int main(int argc,...

Segmentation fault - C Linux
Здраствуйте, написал программу в qt-creator, проект на си без qt ось убунту и решил затестить на своем vds там стоит debian при запуске...

Segmentation fault - C Linux
Вообщем, сделал программу, которая определяет сколько вы пишите слов в минуту(Просто быстро пишите слова, через 60 сек таймер...

Segmentation fault - C (Си)
Добрый день! У меня следующая проблема: Есть функция real *Interpolate(real **tab, real rr), которая в массиве tab находит значение rr и...

Segmentation fault (core dumped) - C (Си)
Учусь по &quot;Язык программирования C&quot; Кернигана Ритчи. Ниже приведен выписанный из нее код (вроде, без ошибок, разве что функция называется не...

3
NoMasters
Псевдослучайный
1908 / 1119 / 77
Регистрация: 13.09.2011
Сообщений: 3,175
15.07.2013, 22:34 #2
Ну и куда по-вашему указывает msg?
1
Winorun
39 / 39 / 4
Регистрация: 03.05.2013
Сообщений: 178
22.07.2013, 15:30 #3
msg создай иначе логическая ошибка и & перед сылкой убери
0
_alexey
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 24
22.07.2013, 16:07  [ТС] #4
Цитата Сообщение от Winorun Посмотреть сообщение
msg создай иначе логическая ошибка и & перед сылкой убери
Да, я уже создал структуру вместо указателя, глупая ошибка=)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 16:07
Привет! Вот еще темы с ответами:

Работа с MySQL и segmentation fault - C Linux
Понадобилось написать модуль, висящий в системе, однако опыта в программировании имею очень мало. Процесс создает пайп, при появлении...

Malloc + free + chdir = segmentation fault - C Linux
Приветствую всех! Есть такой код (можете меня ругать я пока учусь): #include &lt;stdbool.h&gt; #include &lt;dirent.h&gt; #include...

Метаданные файла Segmentation Fault (core dumped) - C Linux
Всем привет, совсем недавно начал изучать Linux и не пойму в чем дело....подскажите пожалуйста: #include &lt;fcntl.h&gt; #include &lt;stdio.h&gt; ...

Сортировка слов в алфавитном порядке. Error: Segmentation fault - C Linux
Разработать программу, которая выводит на экран содержимое текущего каталога в алфавитном порядке. Каталоги не выводить. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru