У меня простой вопрос.У меня есть несколько файлов, один файл около 20000 строк.
Он имеет 5 полей, некоторые другие adt (векторы и списки), но они не вызывают segfault.Сама карта будет хранить значение ключа, эквивалентное примерно 1 на строку.Когда я добавлял карту в свой код, я мгновенно получал ошибку сегмента, я скопировал 5000 из 20000 строк и получил ошибку сегмента, затем 1000, и это сработало.
В Java есть способ увеличитьколичество виртуально выделенной памяти, есть ли способ сделать это в C ++?Я даже удалил элементы, так как они больше не используются, и я могу получить около 2000 строк, но не более.
Вот gdb:
(gdb) exec-file readin
(gdb) run
Starting program: /x/x/x/readin readin
Program exited normally.
valgrind:
HEAP SUMMARY:
==7948== in use at exit: 0 bytes in 0 blocks
==7948== total heap usage: 20,206 allocs, 20,206 frees, 2,661,509 bytes allocated
==7948==
==7948== All heap blocks were freed -- no leaks are possible
код:
....
Flow flw = endQueue.top();
stringstream str1;
stringstream str2;
if (flw.getSrc() < flw.getDest()){
str1 << flw.getSrc();
str2 << flw.getDest();
flw_src_dest = str1.str() + "-" + str2.str();
} else {
str1 << flw.getSrc();
str2 << flw.getDest();
flw_src_dest = str2.str() + "-" + str1.str();
}
while (int_start > flw.getEnd()){
if(flw.getFlow() == 1){
ava_bw[flw_src_dest] += 5.5;
} else {
ava_bw[flw_src_dest] += 2.5;
}
endQueue.pop();
}