Status_access_violation

Тема в разделе "Общие вопросы по С и С++", создана пользователем wils0n, 15 фев 2006.

Статус темы:
Закрыта.
  1. wils0n

    wils0n Гость

    не понятно, что происходит с памятью. Помогите, пожалуйста, разобраться.
    Есть след. код:
    Код (Text):
    #include<iostream>
    #include<list>
    #include<windows.h>

    using namespace std;

    void memavail()
    {
    MEMORYSTATUS lpBuffer;
    GlobalMemoryStatus(&lpBuffer);
    cout << lpBuffer.dwAvailPhys << endl;
    }

    struct Cell {
    long prim;
    long order;
    Cell() : prim(), order() {};
    Cell(long p, long ord) : prim(p), order(ord) {};
    ~Cell() {}
    Cell operator = (const Cell &cell) {return Cell(cell.prim, cell.order);}
    };

    int main()
    {
       time_t t1,t2;
       time(&t1);
    memavail();
    typedef list<Cell*> List;
    List* t = new List();
    for (long i=0;i<15000000;i++) {
    try {
    Cell* cell = new Cell();
    t->push_back(cell);
    if (i % 100 == 0) memavail();
    } catch(...) {
    cout << "Out of memory" << endl;
    throw;
    }
    }
    memavail();
    for (long i=0;i<15000000;i++) {
    List::iterator node = t->begin();
    delete(*node);
    t->erase(node);
    }
    memavail();
    delete t,
    memavail();
    time(&t2);
    t2 = t2 - t1;
    std::cout << "Time : " << t2 << std::endl;  
    return 0;
    }
    Программа вылетает при количестве свободной памяти около 140мб. При запуске программы было свобоно около 550 мб.
    Вылетает, не замечая try...catch с сообщением
    Почему? :D
    <!--QuoteBegin-"stackdump"+-->
    <span class="vbquote">("stackdump")</span><!--QuoteEBegin-->Exception: STATUS_ACCESS_VIOLATION at eip=610C4914
    eax=00000000 ebx=00040000 ecx=00010000 edx=00000000 esi=611A38A0 edi=00000000
    ebp=0022EA58 esp=0022EA4C program=D:\pitt\eclipse\testing\a.exe, pid 2368, thread main
    cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
    Stack trace:
    Frame Function Args
    0022EA58 610C4914 (00000000, 611A38A0, 00040000, 2AF10000)
    0022EA98 6100275E (00000000, 00000000, 00000000, 00000000)
    0022EAC8 61050C8E (61155E78, FFFFFFFF, 00004A48, 00000001)
    0022EBD8 610516E4 (00000000, 00001000, 00000001, 00000022)
    0022EC08 61051F79 (00000000, 00001000, 00000003, 00000022)
    0022ECA8 610AB36C (00000003, 0022ECF8, 0022ECD8, 0040F9C1)
    0022ECD8 6104ED0A (0000000C, FFFFFFFF, 7C809F8A, 6109B4FE)
    0022ED38 610844FF (0000000C, 0022ED94, 0022ED68, 004311F9)
    0022ED48 0041109E (006A20D0, 00000001, 00000000, 0022EE84)
    0022ED68 004311F9 (006A20D0, DF0DF047, 00000000, 00000000)
    0022EDD8 0043AEAB (006A20D0, 0022EEB8, 0022EE18, 610A49B5)
    0022EDF8 0043B014 (006A20D0, 006A20D0, 0022EEB8, 00000004)
    0022EE18 0043B059 (006A20D0, 0022EEB8, 00000000, 004011BD)
    0022EEF8 0040130D (00000001, 006A0168, 006A0090, 6111E673)
    0022EFD8 61004DD2 (0022EFF0, 002402D8, 00000080, 0022F020)
    0022FF88 6100594F (00000000, 00000000, 00000000, 00000000)
    End of stack trace (more stack frames may be present)[/quote]
    Компилятор: g++ 3.4.4
    Среда: ВинХР (cygwin)
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    А с удалением все в порядке? А то я в STL не силен. Вообще я бы сначала точно нашел точку в которой вылетает - дошло оно до удаления или нет? по объемам вполне могло дойти.
     
  3. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Попробовал ради интереса собрать в VS. отработало нормально, от начала до конца, памяти отъело порядка 700М.
     
  4. ????

    ???? Гость

    Для: wils0n
    собирал с помощью gcc version 3.4.4 (mingw special) - всё ОК, без AV
     
  5. wils0n

    wils0n Гость

    гм....интересно.
    значит грабли в системе или в самой памяти.
    спасибо за ответы! :(
     
  6. wils0n

    wils0n Гость

    <!--QuoteBegin-grigsoft+15:02:2006, 12:03 -->
    <span class="vbquote">(grigsoft @ 15:02:2006, 12:03 )</span><!--QuoteEBegin-->А с удалением все в порядке? А то я в STL не силен. Вообще я бы сначала точно нашел точку в которой вылетает - дошло оно до удаления или нет? по объемам вполне могло дойти.
    [snapback]30636" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    С удалением всё в порядке, но до удаления дело не дошло. Это точно. :(
     
  7. Guest

    Guest Гость

    Кстати да, можно память погонять каким тестером, может в чипе проблема.
     
  8. wils0n

    wils0n Гость

    проблема скрывалась в файле cygwin1.dll
    После обновления до последней версии всё стало работать.
    Спасибо всем, кто откликнулся! :(
     
Статус темы:
Закрыта.

Поделиться этой страницей