Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: Apostol_Andrew  
Дата: 21.10.02 14:36
Оценка:
Пишу прогу под MFC использую класс CInternetSession
вот примерный код

    CString m_text1;
    if(!m_pSet2->IsOpen())m_pSet2->Open();
    
    CInternetSession* pInternetSession;
    pInternetSession=new CInternetSession();
    
    if(!pInternetSession)
    {
        AfxMessageBox("NOT INt",MB_OK);
        return;
    }

    CStdioFile *pFile=NULL;
    char* buffer;
    buffer=new char[100000];
    
    pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));

    pFile->Read(buffer,100000);
    m_text1=CString(buffer,100000);

    while(...)
    {
                delete(buffer);
        pFile->Close();
        delete(pFile);
        pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));
        buffer=new char[100000];
        pFile->Read(buffer,100000);

        m_text1=CString(buffer,100000);


    }
    pFile->Close();
    pInternetSession->Close();
    delete(buffer);
    delete(pInternetSession);
    delete(pFile);

    AfxMessageBox("Well Download",MB_OK);


Вопрос
функция 2 раза запускается
На третий "облом" ошибка time out
Help!!!!!!!!!!!!!!
Заранее благодарен
Re: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: MaximE Великобритания  
Дата: 21.10.02 18:36
Оценка:
Здравствуйте Apostol_Andrew, Вы писали:

AA>Пишу прогу под MFC использую класс CInternetSession

AA>вот примерный код

AA>
AA>    CString m_text1;
AA>    if(!m_pSet2->IsOpen())m_pSet2->Open();
AA>    
AA>    CInternetSession* pInternetSession;
AA>    pInternetSession=new CInternetSession();]
// зачем создавать CInternetSession в дин. памяти, а не на стеке?

AA>    
AA>    if(!pInternetSession)
AA>    {
AA>        AfxMessageBox("NOT INt",MB_OK);
AA>        return;
AA>    }

AA>    CStdioFile *pFile=NULL;
AA>    char* buffer;
AA>    buffer=new char[100000];
AA>    
AA>    pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));

AA>    pFile->Read(buffer,100000);
AA>    m_text1=CString(buffer,100000);
// достаточно text1 = buffer

AA>    while(...)
AA>    {
AA>                delete(buffer);
// нужно delete[] buffer

AA>        pFile->Close();
AA>        delete(pFile);
// зачем скобки?

AA>        pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));
AA>        buffer=new char[100000];
AA>        pFile->Read(buffer,100000);

AA>        m_text1=CString(buffer,100000);
// достаточно text1 = buffer

AA>
AA>    }
AA>    pFile->Close();
AA>    pInternetSession->Close();
AA>    delete(buffer);
// нужно delete[] buffer

AA>    delete(pInternetSession);
// убери скобки; создавал бы на стеке - не пришлось бы удалять.

AA>    delete(pFile);
// убери скобки


AA>    AfxMessageBox("Well Download",MB_OK);
AA>
Re[2]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: Apostol_Andrew  
Дата: 22.10.02 12:24
Оценка:
Здравствуйте MaximE, Вы писали:

ME>Здравствуйте Apostol_Andrew, Вы писали:


AA>>Пишу прогу под MFC использую класс CInternetSession

AA>>вот примерный код

AA>>
AA>>    CString m_text1;
AA>>    if(!m_pSet2->IsOpen())m_pSet2->Open();
AA>>    
AA>>    CInternetSession* pInternetSession;
AA>>    pInternetSession=new CInternetSession();]
ME>// зачем создавать CInternetSession в дин. памяти, а не на стеке?

AA>>    
AA>>    if(!pInternetSession)
AA>>    {
AA>>        AfxMessageBox("NOT INt",MB_OK);
AA>>        return;
AA>>    }

AA>>    CStdioFile *pFile=NULL;
AA>>    char* buffer;
AA>>    buffer=new char[100000];
AA>>    
AA>>    pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));

AA>>    pFile->Read(buffer,100000);
AA>>    m_text1=CString(buffer,100000);
ME>// достаточно text1 = buffer

AA>>    while(...)
AA>>    {
AA>>                delete(buffer);
ME>// нужно delete[] buffer

AA>>        pFile->Close();
AA>>        delete(pFile);
ME>// зачем скобки?

AA>>        pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));
AA>>        buffer=new char[100000];
AA>>        pFile->Read(buffer,100000);

AA>>        m_text1=CString(buffer,100000);
ME>// достаточно text1 = buffer

AA>>
AA>>    }
AA>>    pFile->Close();
AA>>    pInternetSession->Close();
AA>>    delete(buffer);
ME>// нужно delete[] buffer

AA>>    delete(pInternetSession);
ME>// убери скобки; создавал бы на стеке - не пришлось бы удалять.

AA>>    delete(pFile);
ME>// убери скобки

ME>
AA>>    AfxMessageBox("Well Download",MB_OK);
AA>>

Да но для других сайтов пашет без проблем
Re[3]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: MaximE Великобритания  
Дата: 22.10.02 14:37
Оценка:
Здравствуйте Apostol_Andrew, Вы писали:

AA>Да но для других сайтов пашет без проблем


Тебя с работы еще не выгнали за такой код?
Re[4]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: small_cat Россия  
Дата: 23.10.02 07:00
Оценка:
Здравствуйте MaximE, Вы писали:

ME>Здравствуйте Apostol_Andrew, Вы писали:


Кстати, интересно, а почему ссыпается? Подумешь, утечки памяти...
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[5]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: MaximE Великобритания  
Дата: 23.10.02 07:54
Оценка:
Здравствуйте small_cat, Вы писали:

SC>Кстати, интересно, а почему ссыпается? Подумешь, утечки памяти...


Не обязательно из-за утечек. Хотя, в этом коде выделяется достаточно большие массивы, а освобождается только первый элемент.

Интересно, чел хоть раз DEBUG версию запускал? У него должно было вывалить кучу неосвобожденных normal block.
Re[6]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: small_cat Россия  
Дата: 23.10.02 08:01
Оценка:
Здравствуйте MaximE, Вы писали:

ME>Не обязательно из-за утечек. Хотя, в этом коде выделяется достаточно большие массивы, а освобождается только первый элемент.


ME>Интересно, чел хоть раз DEBUG версию запускал? У него должно было вывалить кучу неосвобожденных normal block.


Кстати, интересный момент. Я этот момент решил проверить (http://rsdn.ru/forum/?mid=118921
Автор: small_cat
Дата: 23.10.02
)
По крайней мере в седьмом VC утечек нет. Т.е. формально можно говорить лишь о неопределенном поведении в конкретной реализации.
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[7]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: Apostol_Andrew  
Дата: 23.10.02 09:17
Оценка:
Здравствуйте small_cat, Вы писали:

SC>Здравствуйте MaximE, Вы писали:


ME>>Не обязательно из-за утечек. Хотя, в этом коде выделяется достаточно большие массивы, а освобождается только первый элемент.


ME>>Интересно, чел хоть раз DEBUG версию запускал? У него должно было вывалить кучу неосвобожденных normal block.


SC>Кстати, интересный момент. Я этот момент решил проверить (http://rsdn.ru/forum/?mid=118921
Автор: small_cat
Дата: 23.10.02
)

SC>По крайней мере в седьмом VC утечек нет. Т.е. формально можно говорить лишь о неопределенном поведении в конкретной реализации.

Да но проблема не в освобождении памяти
на другом компе на первый раз сразу же прога обламывается
виснет на pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));
Спасибо за ответ про освобождение памяти но дело не в этом
Может что-то на том сервере?
Re[8]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: small_cat Россия  
Дата: 23.10.02 09:34
Оценка:
Здравствуйте Apostol_Andrew, Вы писали:

Виснет до или после? Может, сервак тормозит тот со страшной силой. Кстати, ты я вижу делаешь вот так

  
    pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));

    pFile->Read(buffer,100000);


Что не есть безопасно. См. выдержку из MSDN


Return Value
Returns a file handle for FTP, GOPHER, HTTP, and FILE-type Internet services only. 
Returns NULL if parsing was unsuccessful.

The pointer that OpenURL returns depends on pszURL's type of service. 
The table below illustrates the possible pointers OpenURL can return.

URL type Returns 
file:// CStdioFile* 
http:// CHttpFile* 
gopher:// CGopherFile* 
ftp:// CInternetFile*


Т.е ты запросто можешь NULL выловить и как следствие AV
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[9]: Почему не пашет Help!!!!!!!!!!!!!!!!!!!!!!
От: Apostol_Andrew  
Дата: 23.10.02 10:17
Оценка:
Здравствуйте small_cat, Вы писали:

SC>Здравствуйте Apostol_Andrew, Вы писали:


SC>Виснет до или после? Может, сервак тормозит тот со страшной силой.

Кстати, ты я вижу делаешь вот так
SC>
SC>
SC>  
SC>    pFile=pInternetSession->OpenURL(CString("http://www.transport-ua.com/bulletin.php?параметры"));

SC>    pFile->Read(buffer,100000);
SC> 
SC>


SC>Что не есть безопасно. См. выдержку из MSDN


SC>

SC>
SC>Return Value
SC>Returns a file handle for FTP, GOPHER, HTTP, and FILE-type Internet services only. 
SC>Returns NULL if parsing was unsuccessful.

SC>The pointer that OpenURL returns depends on pszURL's type of service. 
SC>The table below illustrates the possible pointers OpenURL can return.

SC>URL type Returns 
SC>file:// CStdioFile* 
SC>http:// CHttpFile* 
SC>gopher:// CGopherFile* 
SC>ftp:// CInternetFile*
SC>


SC>Т.е ты запросто можешь NULL выловить и как следствие AV

Спосибо за инфу(ведь я первый раз с этим сталкиваюсь)
Попробую через HTTP
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.