ошибка сегментации при изменении размера вектора больших структур - PullRequest
3 голосов
/ 16 сентября 2011

Код ниже генерирует ошибку сегментации, и я не понимаю, почему.Приведенный ниже код использует вектор для хранения нескольких больших структур, но код не запускается и генерирует ошибку сегментации.Я не понимаю почему.Насколько я понимаю, изменение размера вектора выделяет память в куче, поэтому это не должно быть проблемой переполнения стека.Моя система имеет очень большую физическую память (256 ГБ), и код компилируется в 64-битном режиме, поэтому выделение всего 40 МБ не должно быть проблемой.Есть идеи?

Заранее большое спасибо,

#include <vector>

using namespace std;

typedef struct _tmp_t {
    int a_data[10*1000*1000];/* large array */
} tmp_t;

int main( void ) {
    vector<tmp_t> v_tmp;

    v_tmp.resize( 1 );

    return 0;
}

1 Ответ

10 голосов
/ 16 сентября 2011

Проблема в том, что вызов std::vector::resize создаст временные объекты (обратите внимание, что у него есть второй аргумент, по умолчанию T());они находятся в стеке.Таким образом, вы дуете свой стек.

...