Я новичок в программировании на C ++ и пытаюсь написать функцию, которую хочу запустить из R (используя R Cpp).
Внутри функции я создаю массив C символьных строк с нулевым символом в конце.
Функция должна возвращать std :: vector, поэтому я пытаюсь «заполнить» std: : vector с содержимым массива символьных строк.
Это работает (и дает ожидаемый результат), пока массив символьных строк не превысит определенный размер (около полумиллиона); больше и функция вылетает при запуске. Почему?
Кажется, что даже не нужно «заполнять» весь std :: vector - достаточно просто заполнить первый элемент, чтобы вызвать cra sh. Однако, если я заполню первый элемент константной строкой (а не из массива символьных строк), этого не произойдет, и функция с радостью создаст и вернет гораздо большие std :: vectors (например, 100 миллионов строк).
Вот минимальный пример (который я компилирую и запускаю из R с использованием R cpp):
std::vector<std::string> test_function(int vecsize) {
const char mystring[] = "will I crash or not?";
char mychararray[ vecsize ][ sizeof(mystring) ];
int i; for (i=0; i<sizeof(mystring); i++) {
mychararray[0][i] = mystring[i];
}
std::vector<std::string> out_string(vecsize);
out_string[0]=mychararray[0]; // this line causes crash when vecsize = 500000 or more
// out_string[0]="like this I dont crash"; // but runs fine using this line instead with vecsize over 100 million
return out_string;
}
Вызов test_function (100000) - это нормально, но вызов test_function (1000000) завершается сбоем ,
Я предполагаю, что это что-то тривиальное: заранее спасибо за любой совет или объяснение того, что я делаю неправильно.