Я работаю над создателем массивов UnsafeAppend api. Согласно коду в документе.
arrow::Int64Builder builder;
// Make place for 8 values in total
builder.Resize(8);
builder.UnsafeAppend(1);
builder.UnsafeAppend(2);
builder.UnsafeAppend(3);
builder.UnsafeAppendNull();
builder.UnsafeAppend(5);
builder.UnsafeAppend(6);
builder.UnsafeAppend(7);
builder.UnsafeAppend(8);
std::shared_ptr<arrow::Array> array;
arrow::Status st = builder.Finish(&array);
Builder.Resize (i) должен освободить место для значения i. После изменения i на другое значение, например 100000000, у меня должно быть место для 100000000 значений. Я получил ошибку сегментации от моего компилятора, это странно. Я провел еще один эксперимент, изменив размер компоновщика до 10. Конструктор должен иметь только 10 пробелов, но мой код может успешно добавить к компоновщику даже больше значений, чем 10.
Я немного сбит с толку, разве у конструктора должно быть именно то пространство i с api Resize (i). Кто-нибудь знает какие-нибудь правильные пути к UnsafeAppend API?
int row = 100000000
arrow::StringBuilder b1;
b1.Resize(row);
for(int i=0;i<row;i++)
{
std::string str = "test";
b1.UnsafeAppend(str);
}