2015-04-24 4 views
0
std::string src; 
cout<<"maximum length of string : "<<src.max_size(); 

Выход я получаю:Ограничить максимальную длину станд :: строки переменной

maximum length of string : 1073741820 

Мне нужно создать большой массив строк, как строки ввода [100000], но я получаю ошибку во время выполнения когда я использую индексы массивов более 80 000. Длина моих строковых переменных меньше, средняя длина - 15 символов. Поэтому мне нужно ограничить длину строковой переменной.

Ниже приведены мои вопросы:

  1. Какие факторы рассматриваются для принятия решения индекса larget массива строки?

  2. Как уменьшить максимальную переменную max_size()?

+4

Я думаю, вы вводите в заблуждение концепцию текущего максимально допустимого размера и текущего размера строки, просто потому, что у вас есть массив из тысяч строк, это не значит, что все они являются «max_size» – EdChum

+4

«max_size» не имеет к этому никакого отношения. Это не способствует вашей ошибке, и она не занимает память. Вся посылка вопроса нарушена. –

+0

Как я могу создать большой массив строк? – ssh99

ответ

5

Вы совершили неправильный вывод. std::string::max_size() не отражает текущее использование памяти и не влияет на вашу ошибку времени выполнения. It is an implementation quantity that tells you the maximum possible size of a string on your system: вы не можете изменить его, и вам не нужно.

Вы разбиваете свой стек на 80 000 std::string, так как пространство стека обычно ограничено. Ваш компилятор должен решить, сколько пространства стека будет доступно в вашей программе. Как правило, для массива это большое, вместо этого вы должны использовать динамическое или статическое распределение.

Хороший способ сделать это - использовать стандартные контейнеры, например. std::vector<std::string>.

Смежные вопросы