Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Status_access_violation
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
wils0n
не понятно, что происходит с памятью. Помогите, пожалуйста, разобраться.
Есть след. код:
#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 с сообщением
Цитата
      6 [main] a 2368 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
  1365 [main] a 2368 open_stackdumpfile: Dumping stack trace to a.exe.stackdump

Почему? wacko.gif
Цитата("stackdump")
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)

Компилятор: g++ 3.4.4
Среда: ВинХР (cygwin)
grigsoft
А с удалением все в порядке? А то я в STL не силен. Вообще я бы сначала точно нашел точку в которой вылетает - дошло оно до удаления или нет? по объемам вполне могло дойти.
grigsoft
Попробовал ради интереса собрать в VS. отработало нормально, от начала до конца, памяти отъело порядка 700М.
????
Для: wils0n
собирал с помощью gcc version 3.4.4 (mingw special) - всё ОК, без AV
wils0n
гм....интересно.
значит грабли в системе или в самой памяти.
спасибо за ответы! smile.gif
wils0n
Цитата(grigsoft @ 15:02:2006, 12:03 )
А с удалением все в порядке? А то я в STL не силен. Вообще я бы сначала точно нашел точку в которой вылетает - дошло оно до удаления или нет? по объемам вполне могло дойти.
*

С удалением всё в порядке, но до удаления дело не дошло. Это точно. sad.gif
Guest
Цитата
значит грабли в системе или в самой памяти.


Кстати да, можно память погонять каким тестером, может в чипе проблема.
wils0n
проблема скрывалась в файле cygwin1.dll
После обновления до последней версии всё стало работать.
Спасибо всем, кто откликнулся! smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.