Я пытаюсь сделать простую программу чата с c и сокетами. Когда я запускаю его после нескольких вещей, он говорит, что программа получила сигнал EXC_BAD_ACCESS - PullRequest
0 голосов
/ 01 сентября 2011
printf("what is your name?");
    gets(send_name);

    strcpy(send_name2, strcat("You are connected to ", send_name));
    send(connected, send_name2, strlen(send_name2), 0);

Другой исполняемый файл не получает то, что я отправил ...

nbytes_recieved = recv(sock, recv_name, 50 ,0);
recv_name[nbytes_recieved] = '\0';

Это код, который я использовал в коде клиента, чтобы позволить ему получить строку.

Спасибо, Сидд

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

strcat ожидает в качестве первого аргумента доступный для записи буфер.То, что вы даете ему, это постоянная строка, которая, вероятно, хранится где-то в области процесса, доступной только для чтения.Функция пытается написать сразу после этой константной строки, что приводит к нарушению доступа к памяти.

2 голосов
/ 01 сентября 2011

EXC_BAD_ACCESS является эквивалентом ошибки сегментации, обычно разыменования нулевого указателя или доступа к памяти, не выделенной для процесса. Это может быть вызвано, если recv_name слишком мало, чтобы содержать все полученные байты плюс завершающий '\ 0'.

Чтобы начать отладку, скомпилируйте с символами отладки и начните изучать содержимое recv_name в различных точках этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...