Инициализирующий вектор <string>со сбоем массива констант - PullRequest
0 голосов
/ 24 октября 2018

У меня есть класс, который пытается инициализировать 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...