2012-01-24 8 views
0

Вот код:Нарушение прав доступа Ошибка

void SendRemoteData(string Data){ 
    char charout[1000]; 
    memset(charout,0,sizeof(charout)); 
    memcpy(charout,Data.c_str(),Data.size()); 
    send(tempclient, charout, sizeof(charout),0); 
} 

Когда я пытаюсь использовать эту функцию в два раза, я получаю сообщение об ошибке. Что мне делать?

+1

что длина 'Data'? – sharptooth

+0

Вместо использования 'memset' вы можете написать char charout [1000] = {};' Инициализировать массив будет нулевой инициализацией. – Nawaz

+0

Ошибка? какая ошибка? Попробуйте проверить 'send' return и проверить' errno' –

ответ

1

Попробуйте вместо этого:

void SendRemoteData(string Data){ 
    send(tempclient, Data.c_str(), Data.size(),0); 
} 
+0

Это не то же самое, исходный код всегда отправляет 1000 байтов. – interjay

+0

Правда, функциональность отличается, и, возможно, именно то, что требуется OP. – Dialecticus

2

Найти в Wich линии нарушение прав доступа происходит - есть некоторые позиции, которые могли бы быть проблемой. В качестве примера: вы предполагаете, что Data всегда меньше 1000 символов - в противном случае вы вызываете переполнение буфера. Кроме того, вы всегда отправляете 1000 байтов - это действительно ваше намерение?

0

Проблема возникла из-за того, что вы не можете использовать строку в memcpy, но используете Data.c_str(), что неверно и дает мне ошибку.

Слепок должен решить проблему:

memcpy(charout,(char *)Data.c_str(),Data.size()); 
Смежные вопросы