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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оператор new стал откровенно плохо работать 
V
    Опции темы
neosapient
Дата 6.5.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здраствуйте
Извените, что сделаю перессылку на другую ветку форума, но появилась проблема, которая в ту тему неукладывается... (так начал строить сложносоченненые обороты => пора спать  smile ) 

дублирование вопроса,

У меня есть метод 
char* TProtocolPOP3::iFindFirstInt(char* pzStr,int& iNum);
В первый параметр передается указатель на строку. Символы в строке перебераются, пока не получу ближайшее число. Через второй параметр это число возвращается. А сама функция возвращает указатель на первый символ после числа в исходной строке, либо ноль при неудаче.

Но проблема не в этом методе, а в операции new.
Есть метод, который помогает узнать список писем.
TProtocolPOP3::GetListID(int*& piMessageID, int*& piMessageSize, int& iNumMessage)
При первом запуске iFindFirstInt(...) из полученого с сервера сообщения узнаю, сколько писем в списке.
    // ищем кол-во писем
    ptr = iFindFirstInt(psBuf,iNumMessage);
Но далее, пытаюсь выделить память, а оператор new возвращает NULL
    // создаем возвращаемые переменные
    piMessageID = new int [iNumMessage];
    piMessageSize = new int [iNumMessage];
    if(piMessageID==NULL)return 0;
    if(piMessageSize==NULL)return 0;
Вопрос, почему в данной ситуации new не выделяет память? Как сделать так, чтоб память выделялась?

P.S. Такая фигня в VC7, в VC6 все  нормально работает


Это сообщение отредактировал(а) neosapient - 6.5.2007, 22:18

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Demo_problem2.rar 6,78 Kb
PM MAIL   Вверх
Anikmar
Дата 6.5.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



В обще-то странно. new не должен NULL возвращать по умолчанию.
Если память не выделить - должно быть исключение...
У вас в проверках точно двойное равно стоит, а не одинарное?

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


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(Anikmar @  6.5.2007,  22:26 Найти цитируемый пост)
Если память не выделить - должно быть исключение...

в 6 может еще и NULL он стандарт не поддерживает


--------------------
Мой блог
PM MAIL WWW   Вверх
Anikmar
Дата 6.5.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(vinter @  6.5.2007,  23:02 Найти цитируемый пост)
в 6 может еще и NULL он стандарт не поддерживает 


Чего не знаю - того не знаю, не сталкивался.

Еще как вариант - если мусор в iNumMessage.

В приведенном фрагменте 
ptr = iFindFirstInt(psBuf,iNumMessage); 
ошибка, но в реальном коде ее скорее всего нет...
PM MAIL ICQ   Вверх
Hurricane
Дата 7.5.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Первое, что приходит  в голову - значение iNumMessage какое-то нереальное. Поэтому память и не выделяется.

Немного смущает ссылка на указатель (int*&), но это, скорее всего, к делу не относится.
PM MAIL   Вверх
Goganchic
Дата 7.5.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Hurricane @  7.5.2007,  06:29 Найти цитируемый пост)
Первое, что приходит  в голову - значение iNumMessage какое-то нереальное.

Согласен. 
neosapient, попробуй в этом месте еще и iNumMessage выводить, может он отрицательный или равный нулю.
PM Jabber   Вверх
srd
Дата 7.5.2007, 07:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Прежде, чем это удалось скомплировать, пришлось пофиксить кучу ошибок вида:
Код

D:\temp>g++ -g main.cpp TProtocolPOP3.cpp -lws2_32
In file included from main.cpp:1:
TProtocolPOP3.h:36: error: ISO C++ forbids declaration of `DisconnectServer' with no type
TProtocolPOP3.h:42: error: ISO C++ forbids declaration of `SetServerPOP3' with no type
TProtocolPOP3.h:43: error: ISO C++ forbids declaration of `SetPortServerPOP3' with no type
TProtocolPOP3.h:44: error: ISO C++ forbids declaration of `SetServerLogin' with no type
TProtocolPOP3.h:45: error: ISO C++ forbids declaration of `SetServerPassword' with no type
TProtocolPOP3.h:46: error: ISO C++ forbids declaration of `SetDomen' with no type
TProtocolPOP3.h:47: error: ISO C++ forbids declaration of `GetStatus' with no type
TProtocolPOP3.h:48: error: ISO C++ forbids declaration of `GetListID' with no type
TProtocolPOP3.h:49: error: ISO C++ forbids declaration of `GetMessageSize' with no type
TProtocolPOP3.h:50: error: ISO C++ forbids declaration of `GetMessageA' with no type
TProtocolPOP3.h:51: error: ISO C++ forbids declaration of `GetMessageHead' with no type
TProtocolPOP3.h:52: error: ISO C++ forbids declaration of `GetLastMessage' with no type
TProtocolPOP3.h:53: error: ISO C++ forbids declaration of `DeleteMessage' with no type
TProtocolPOP3.h:54: error: ISO C++ forbids declaration of `UndeleteMessage' with no type

Это что, VC такое пропускает?  smile 

Далее, как только выполнение программы дошло до строчки 
Код

piMessageID = new int [iNumMessage];

прога упала в segfault

Вскрытие показало:
1. В двух местах память выделяется оператором new[], а освобождается delete вместо delete[] => убивается работоспособность heap
2. strсat везде по коду также убивают heap. Например
Код

MailMessage[0] = strdup("USER "); 
// каждый вызов strcat пишет за границы буфера
MailMessage[0] = strcat(MailMessage[0],szServerLogin);
MailMessage[0] = strcat(MailMessage[0],"\r\n");

Дальше смотреть не стал, и так всё понятно smile В таких условиях надо удивляться, что выполнение вообще доходит до вызова new[iNumMessage]

Это сообщение отредактировал(а) srd - 7.5.2007, 07:09


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Goganchic
Дата 7.5.2007, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так, все понятно: специалисты "высокого уровня" среди нас
PM Jabber   Вверх
srd
Дата 7.5.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Цитата(Goganchic @  7.5.2007,  14:58 Найти цитируемый пост)
Так, все понятно: специалисты "высокого уровня" среди нас 

Это ты к чему? При сломанном heap'е любой вызов new/delete может приводить к падению программы в неожиданных местах. Разве есть сомнения?  smile 


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
neosapient
Дата 7.5.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



srd, спасибо за ответ

Цитата(srd @  7.5.2007,  07:07 Найти цитируемый пост)
Прежде, чем это удалось скомплировать, пришлось пофиксить кучу ошибок вида:
...
Это что, VC такое пропускает?   

Да допускает, хотя и выдает предупреждение. 


Цитата(srd @  7.5.2007,  07:07 Найти цитируемый пост)
Далее, как только выполнение программы дошло до строчки 
piMessageID = new int [iNumMessage];
прога упала в segfault

Развею сомнения, которые высказывались другими участниками этой ветки форума, насчет некоректного значения iNumMessage - с числом всё нормально.
В VC7 прога не падала, просто оператор new выдавал NULL.

Что такое "segfault"?



Цитата(srd @  7.5.2007,  07:07 Найти цитируемый пост)
Вскрытие показало:
1. В двух местах память выделяется оператором new[], а освобождается delete вместо delete[] => убивается работоспособность heap

Нашел только одно место в методе iFindFirstInt к указателю ptr3, исправил - локально заработало, но при нескольких вызовах (и других методов) программа падает. :(

Где ещё упустил?


Цитата(srd @  7.5.2007,  07:07 Найти цитируемый пост)
2. strсat везде по коду также убивают heap. Например
// Создаем массив указателей
char **MailMessage = NULL;
int iMailMessage = 4;
MailMessage = new char * [iMailMessage+1]; // последний указатель всегда нулевой
MailMessage[0] = strdup("USER "); 
// каждый вызов strcat пишет за границы буфера
MailMessage[0] = strcat(MailMessage[0],szServerLogin);
MailMessage[0] = strcat(MailMessage[0],"\r\n");
// ... и так далее пока всё не заполню
Дальше смотреть не стал, и так всё понятно  В таких условиях надо удивляться, что выполнение вообще доходит до вызова new[iNumMessage]

Не, мне кажется, что здесь всё в порядке, так как я не меняю сам указатель на массив указателей MailMessage

Если я не прав, то поправь меня?

И ещё теряется память при использовании A=strcat(A,B), по указателю A?
Если да, то чем удалять память, возвращенную функцией strdup(const char*), функцией free или delete?

Это сообщение отредактировал(а) neosapient - 7.5.2007, 13:07
PM MAIL   Вверх
srd
Дата 7.5.2007, 13:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
Да допускает, хотя и выдает предупреждение. 

Так делать нельзя :(

К тому же, например, в функции TProtocolPOP3::GetListID() не указано возвращаемое значение для "нормального" сценария. Есть только return 0 в случае ошибки. При этом возвращаемое значение проверяется в другом месте:
Код

// Здесь GetListID возвращает мусор. Теоретически возвращаемым значением может оказаться 0,
// и поведение проги будет неожиданным.
if(pop3.GetListID(piMessageID, piMessageSize, iNumMessage)){


Короче, варнинги надо читать и думать, откуда они берутся smile

Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
Что такое "segfault"?

Попытка обратиться по несуществующему адресу в памяти, или попытка выполнить какую-то операцию с участком в памяти, для которого такая операция запрещена. Например, запись в область, доступную только для чтения и т.д.

Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
Нашел только одно место в методе iFindFirstInt к указателю ptr3, исправил - всё заработало.

Где ещё упустил?

В функции GetStream => delete MailMessage

Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
Не, мне кажется, что здесь всё в порядке, так как я не меняю сам указатель на массив указателей MailMessage

Функция strdup выделяет памяти столько, сколько надо, чтобы туда влезла копируемая строка.
Код

// Здесь MailMessage[0] будет указывать на буфер длиной ровно 6 символов
// "USER " и нулевой символ на конце
MailMessage[0] = strdup("USER ");
// Функция strcat не выделяет память, а полагает, что MailMessage[0] ссылается на буфер
// достаточной длины. Здесь функция пишет первый символ в то место, где раньше был 0,
// а все оставшиеся уже за границы буфера.
MailMessage[0] = strcat(MailMessage[0],szServerLogin);
MailMessage[0] = strcat(MailMessage[0],"\r\n");


Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
И ещё теряется память при использовании A=strcat(A,B), по указателю A?

strcat не выделяет память. Она пишет в конец строки А и считает, что буфер A достаточно большой, чтобы туда ещё влезло и B.
И возвращает она тот же буфер, который ты передал первым параметром.

Цитата(neosapient @  7.5.2007,  19:52 Найти цитируемый пост)
Если да, то чем удалять память, возвращенную функцией strdup(const char*), функцией free или delete?

только free.



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
neosapient
Дата 7.5.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Немного подредактировал

- методы возвращают значения
- добавил GetStream => delete[] MailMessage

Но ошибка осталась

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Demo_problem3.rar 6,83 Kb
PM MAIL   Вверх
Hurricane
Дата 7.5.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Это шо такое? (Функция большая, поэтому лишнее покоцано)

Код

bool TProtocolPOP3::GetStream(int iCommand, int iMail, char*& pzBuf, int& iBufSize) // организация универсального потока получения данных с почтового сервера
{
    ...
            // Создаем массив указателей
            MailMessage = new char * [iMailMessage+1]; // последний указатель всегда нулевой
            // USER
            MailMessage[0] = strdup("USER ");
            MailMessage[0] = strcat(MailMessage[0],szServerLogin);
            MailMessage[0] = strcat(MailMessage[0],"\r\n");
            // PASS
            MailMessage[1] = strdup("PASS ");
            MailMessage[1] = strcat(MailMessage[1],szServerPassword);
            MailMessage[1] = strcat(MailMessage[1],"\r\n");
    ...
}



Выделяем 6 байт (через strdup()), а записываем фиг знает сколько (через strcat())?

Ну и дальше там подобное встречается.

Упс, srd уже написал про это.


Это сообщение отредактировал(а) Hurricane - 7.5.2007, 16:30
PM MAIL   Вверх
srd
Дата 7.5.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Угу, ошибки со strdup/strcat не пофиксены.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
neosapient
Дата 7.5.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Угу, ошибки со strdup/strcat не пофиксены. 

Знаю, только руки не дошли.
Да вроде и не от этого проблемы 

Ладно, сейчас подменю на буфферы
PM MAIL   Вверх
Goganchic
Дата 7.5.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



srd, специалистом высокого уровня я назвал neosapient, т.к. код у него какой-то не такой... ужасный.

neosapient, на будущее: если компилятор выводит предупреждения, то значит что-то не так, предупреждения иногда бывают страшнее ошибок, т.к. если на них не обращать внимание, то потом могут выскакивать оочень страшные результаты, а ты даже не сможешь толком понять из-за чего, т.к. вроде как ошибки-то и не было.
PM Jabber   Вверх
neosapient
Дата 8.5.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я не программист - я просто учусь

Так пойдет

Это сообщение отредактировал(а) neosapient - 8.5.2007, 14:59

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TProtocolPOP3.rar 7,09 Kb
PM MAIL   Вверх
Goganchic
Дата 8.5.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



neosapient, ну тогда ладно smile
PM Jabber   Вверх
Earnest
Дата 8.5.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



 smile 
Когда видишь такое название темы: "оператор new стал откровенно плохо работать".
Хочется ответить: наверное ему мало платят, или у него проблемы в семье...

Ну почему не назвать тему: я где-то накосячил выделением памяти?
Это ведь не просто придирка: ты автоматически следуешь ходу своих мыслей, а думаешь ты, что это new плохо работает или ошибка в компиляторе или синтаксис C++ неправильный или что-то в этом роде.
Что править в коде, тебе написали. А чобы самому научится эффективно искать ошибки, нужно выпрямить себе мозги: искать ошибку всегда у себя в коде, в логике.
Это странно, но, похоже, все начинающие программисты по первости валят на компилятор. И у меня тоже так было...
Еще раз извините за оффтопик... навеяло...


--------------------
...
PM   Вверх
Goganchic
Дата 8.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



+1 оффтопик smile
Earnest, так он и не говорит что компилятор виноват, а дает что-то вроде краткого описания проблемы, то что через какое-то время использования оператор new действиетльно работает плохо, т.к. должен выделять память, а он этого не делает.
PM Jabber   Вверх
neosapient
Дата 8.5.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  8.5.2007,  21:08 Найти цитируемый пост)
Ну почему не назвать тему: я где-то накосячил выделением памяти?

Так пока не подсказа ли, что где то накасячил, и незнал как назвать
Такое поведение оператора new мне было незнакомо

И ещё по опыту общения на этом форуме: называть тему надо ярко, иначе тебе никто не поможет - просто не обратят внимания на твой вопрос.

К слову код считается завершенным, всмысле есть ещё видимые (не видимые) утечки памяти?

Это сообщение отредактировал(а) neosapient - 8.5.2007, 23:16
PM MAIL   Вверх
dizzy1984
Дата 9.5.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 
Цитата(neosapient @  8.5.2007,  23:10 Найти цитируемый пост)
И ещё по опыту общения на этом форуме: называть тему надо ярко, иначе тебе никто не поможет - просто не обратят внимания на твой вопрос.

 smile 
PM MAIL   Вверх
JackYF
Дата 10.5.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(neosapient @  8.5.2007,  23:10 Найти цитируемый пост)
И ещё по опыту общения на этом форуме: называть тему надо ярко, иначе тебе никто не поможет - просто не обратят внимания на твой вопрос.


Несогласен. По своему, хоть и не очень большому, опыту.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Anikmar
Дата 10.5.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



 smile 
Цитата(neosapient @  8.5.2007,  23:10 Найти цитируемый пост)
И ещё по опыту общения на этом форуме: называть тему надо ярко, иначе тебе никто не поможет - просто не обратят внимания на твой вопрос.

Не согласен категорически. На этом форуме как раз иногда на такую фигню отвечают! Причем терпеливо и вежливо. 
Обращают внимание на все.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1272 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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