У меня есть то, что кажется странной проблемой, и мне любопытно, видел ли кто-нибудь еще этот феномен. Я обрабатываю график с использованием случайного алгоритма, поэтому начальное число отличается для каждого прогона.
unsigned int sseed = time(0);
srand(sseed);
Хотя мой код использует достаточное количество памяти, ему не нужно использовать всю доступную память. Когда я запускаю свой код, 90 +% времени он работает без помех. Однако с определенными начальными значениями у меня возникают проблемы с памятью. Это происходит, когда я изменяю размер вектора CC:
vector<double> tmp_CC,CC;
tmp_CC.resize(SAMPLE_SIZE+1,0.0);
CC.resize(numberOfNodes+1,0.0); // line 1480
а я это вывод отладчика.
Program received signal SIGSEGV, Segmentation fault.
0x481d4cdb in malloc_pages (size=86016) at /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c:543
543 /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c: No such file or directory.
in /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c
Current language: auto; currently c
(gdb) backtrace
#0 0x481d4cdb in malloc_pages (size=86016) at /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c:543
#1 0x481d522f in imalloc (size=82504) at /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c:738
#2 0x481d5d7a in pubrealloc (ptr=0x0, size=82504, func=0x4825ba17 " in malloc():")
at /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c:1126
#3 0x481d5e6b in malloc (size=82504) at /.amd/distserv/share0/FreeBSD-6.3/src/lib/libc/stdlib/malloc.c:1150
#4 0x48126e0d in operator new () from /usr/local/lib/gcc/i386-unknown-freebsd6.1/3.4.6/libstdc++.so.6
#5 0x08053b4f in __gnu_cxx::new_allocator<double>::allocate (this=0xbfbfe7e0, __n=10313) at new_allocator.h:81
#6 0x0805229a in std::_Vector_base<double, std::allocator<double> >::_M_allocate (this=0xbfbfe7e0, __n=10313) at stl_vector.h:113
#7 0x08052566 in std::vector<double, std::allocator<double> >::_M_fill_insert (this=0xbfbfe7e0, __position={_M_current = 0x0},
__n=10313, __x=@0xbfbfe740) at vector.tcc:308
#8 0x080509f4 in std::vector<double, std::allocator<double> >::insert (this=0xbfbfe7e0, __position={_M_current = 0x0}, __n=10313,
__x=@0xbfbfe740) at stl_vector.h:612
#9 0x0804fa40 in std::vector<double, std::allocator<double> >::resize (this=0xbfbfe7e0, __new_size=10313, __x=@0xbfbfe740)
at stl_vector.h:398
#10 0x0804da71 in calc_closeness_L () at SSDE.h:1480
#11 0x0804e8fd in main (argv=7, argc=0xbfbfeaec) at closeness.cpp:113
Рандомизация влияет на то, с каких узлов я начинаю выполнять алгоритм Дейкстры, но не оказывает прямого (или, я думаю, косвенного) влияния на объем выделяемой памяти.
Кто-нибудь когда-либо видел эту «случайную» проблему с ошибкой сегментации? Или возможные ошибки, чтобы проверить в коде?
Спасибо!