Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с изменением буфера и строк 
:(
    Опции темы
fire64
Дата 6.10.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



xvr, теперь программа падает в strcpy(result,probel)

хотя в release в этом месте все в порядке

от замены моей конструкции на твою ничего не изменилось

Это сообщение отредактировал(а) fire64 - 6.10.2009, 22:21
PM MAIL   Вверх
niXman
Дата 6.10.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 0
Всего: 0



Где-то порча кучи. Пройдись дебагером.
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
fire64
Дата 6.10.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



есть подозрение что проблема связана с ClientIP

Код


struct clientnetinfo
{
    sockaddr_in client_addr;
    SOCKET        client_socket; 
    char        clientuserdata[1024];
}; 

clientnetinfo *ClientIP;

int main(int argc, char *argv[])
{

ClientIP = new clientnetinfo[1024]; 

send(ClientIP[userid].client_socket,WELKOM,strlen(WELKOM),0);

_beginthread( NetworkThread, 0, (void*)userid );

}


Плюс я не уверен что безопасно использовать ClientIP  из другого потока

void NetworkThread(void *userid) 
{
        int uerid = (int)userid;

        nNumRead = recv(ClientIP[uerid].client_socket, msg, MAX_MSG, 0);

}



PM MAIL   Вверх
niXman
Дата 7.10.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 0
Всего: 0



Цитата(fire64 @  6.10.2009,  21:00 Найти цитируемый пост)
Плюс я не уверен что безопасно использовать ClientIP  из другого потока

Если пока работают потоки, данные в ClientIP не изменяются, то безопасно.

Это сообщение отредактировал(а) niXman - 7.10.2009, 01:18
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
fire64
Дата 7.10.2009, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



хм вообще-то изменяются

Код

у меня в void NetworkThread(void *userid) 


используется код

Код

strcpy(ClientIP[uerid].clientuserdata, userdata );


для каждого пользователя создается свой поток

в int main(int argc, char *argv[])

используется код

Код

    while(1) 
    {
        userid ++;

        fromlen=sizeof(ClientIP[userid].client_addr);

        ClientIP[userid].client_socket=accept(name_sock, (struct sockaddr*)&ClientIP[userid].client_addr, &fromlen );

        send(ClientIP[userid].client_socket,WELKOM,strlen(WELKOM),0);

        userscount = userid;

        _beginthread( NetworkThread, 0, (void*)userid );

     }


Это сообщение отредактировал(а) fire64 - 7.10.2009, 01:33
PM MAIL   Вверх
niXman
Дата 7.10.2009, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 0
Всего: 0



Займись синхронизацией.
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
fire64
Дата 7.10.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



niXman, думаешь из-за этого  происходит порча кучи ?



PM MAIL   Вверх
niXman
Дата 7.10.2009, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 0
Всего: 0



fire64, Не уверен.
Поразмышляю вслух. Допустим, в то время, как один из потоков, читает из своего элелента массива, данные/строку(или что это?), другой поток, в это же время, пишет в нее, то поток(читающий), не дочитав прежние данные из строки, начинает читать новые. Не видя кода целиком, сказать точно сложно. Но, использовать многопоточный код, когда один из потоков является модификатором, без синхронизации опасно.

Добавлено через 6 минут и 4 секунды
Покажи весь код, если не секрет smile 

Это сообщение отредактировал(а) niXman - 7.10.2009, 02:03
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
fire64
Дата 7.10.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



ок

держи исходники и скомпиленый DC хаб

на данный момент поддерживается только чат

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  firedc.rar 34,85 Kb
PM MAIL   Вверх
xvr
Дата 7.10.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(fire64 @ 6.10.2009,  22:19)
xvr, теперь программа падает в strcpy(result,probel)

probel случайно в этом месте не равен NULL?
И вообще результаты всех поисков (strstr, strchr и пр) рекомендуется проверять на NULL. А если то, в чем ищут приходит извне, то НАСТОЯТЕЛЬНО рекомендуется  smile 
PM MAIL   Вверх
fire64
Дата 7.10.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

Репутация: нет
Всего: нет



хм теперь стало вылетать на 

fread (MotdText,1, len, motd);

хотя я тот код и не трогал, очень странные вылеты по всему коду

xvr, я уверен что там нет нулей, да и дебагер показщывает что там "Fire64|"


Это сообщение отредактировал(а) fire64 - 7.10.2009, 11:56
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.