2017-01-13 2 views
0

Я пытаюсь прочитать имя пользователя и пароль от клиента и передать его на сервер. Я также пытаюсь динамически распределять строки (я не знаю много об этом, пытаясь изучить его), и я уверен, что есть проблема. На последних двух printf я получаю ошибку сегментации (сбрасывание ядра).Ошибка сегментации на клиентском/серверном приложении C++ при печати

int nrbytes; 
char *Usercl,*Passcl; 
if(read (tdl.cl, &nrbytes, sizeof(int)) <= 0) 
{ 
    printf("[server]Thread - %d\n",tdl.idThread); 
    perror("Read() error\n "); 
} 

Usercl = new char[nrbytes+1]; 
if(read (tdl.cl, &Usercl, sizeof(nrbytes)) <= 0) 
{ 
    printf("[server]Thread - %d\n",tdl.idThread); 
    perror("Read() error\n "); 
} 

if(read (tdl.cl, &nrbytes, sizeof(int)) <= 0) 
{ 
    printf("[server]Thread - %d\n",tdl.idThread); 
    perror("Read() error\n "); 
} 
Passcl = new char[nrbytes+1]; 
if(read (tdl.cl, &Passcl, sizeof(nrbytes)) <= 0) 
{ 
    printf("[server]Thread - %d\n",tdl.idThread); 
    perror("Read() error\n "); 
} 
printf("[server]Thread - %d\n. User:%s\n",tdl.idThread,Usercl); 
printf("[server]Thread - %d\n. Pass:%s\n",tdl.idThread,Passcl); 

Я получаю ошибку сегментации (ядро сбрасывается) на последних 2 печатных файлах.

+1

Я предполагаю, что данные, которые вы читаете, не являются нулевыми. –

+3

Кроме того, 'if (read (tdl.cl, & Usercl, sizeof (nrbytes)) <= 0)' --->' if (read (tdl.cl, Usercl, nrbytes) <= 0) ' –

ответ

0

Я установил его. Я сделал все, что вы мне сказали, и теперь это работает. Благодаря!

1

Ваши символы Usercl и Passcl уже являются указателями. Удалите '&' по обоим их запросам на чтение.