У меня есть класс, который пытается инициализировать vector<string>
с 9000 строками, и программа падает / ломается в точке входа в конструктор класса.
Это единственная информация о точке останова, которую я могусмотри (неразборчиво для меня):
; Find next lower page and probe
cs20:
sub eax, _PAGESIZE_ ; decrease by PAGESIZE
test dword ptr [eax],eax ; probe page. // < breaks here
jmp short cs10
_chkstk endp
Если вместо этого запустить тот же код с меньшим массивом строк {"string1", "string2"}
, то при входе в конструктор класса не произойдет сбой.
someclass.cpp:
#include "someclass.h"
using namespace std;
CSomeClass::CSomeClass()
{ // < crashes/breaks right here or between here and next instruction
// Crashes
m_vStrings = {"string1", "string2", ... "string9000"};
// Works
m_vStrings = {"string1", "string2"};
}
someclass.h:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
class CSomeClass
{
protected:
vector<string> m_vStrings;
public:
CSomeClass();
};
Кажется, что все в порядке, но я могу столкнуться с чем-то вроде, смею сказать,Возможно, переполнение стека?
Использование:
CSomeClass class1; // crashes in here so usage hasn't been tested yet
Это работает, но это двойное распределение, которого я хотел бы избежать, если это возможно:
const char* sStrings[] = {"string1", "string2", ... "string9000"};
m_vStrings = vector<string>(sStrings, end(sStrings));