You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Antoine Pitrou (Jira)" <ji...@apache.org> on 2022/01/03 16:06:00 UTC

[jira] [Commented] (ARROW-15228) StringBuilder UnsafeAppend causes EXC_BAD_ACCESS

    [ https://issues.apache.org/jira/browse/ARROW-15228?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17468078#comment-17468078 ] 

Antoine Pitrou commented on ARROW-15228:
----------------------------------------

If you want to use unsafe appends, then yes, you need to know an upper bound (and preferably a reasonable one if you don't want to overallocate too much). Otherwise, you should use normal appends (but even then, {{Reserve}} and {{ReserveData}} are useful to limit the number of resizes).

> StringBuilder UnsafeAppend causes EXC_BAD_ACCESS
> ------------------------------------------------
>
>                 Key: ARROW-15228
>                 URL: https://issues.apache.org/jira/browse/ARROW-15228
>             Project: Apache Arrow
>          Issue Type: Bug
>            Reporter: Will Ayd
>            Priority: Minor
>
> It seems that StringBuilder->UnsafeAppend produces a memory violation. This is on macOS Monterey with an intel chip if it matters. Below is a sample program that will reproduce the error:
> {code:java}
> #include <arrow/api.h>
> arrow::Status RunMain(int argc, char** argv) {
>   auto builder = std::make_shared<arrow::StringBuilder>();
>   ARROW_RETURN_NOT_OK(builder->Reserve(1));
>   builder->UnsafeAppend(std::string("a"));  
>   return arrow::Status::OK();
> }
> int main(int argc, char** argv) {
>   arrow::Status st = RunMain(argc, argv);
>   if (!st.ok()) {
>     return 1;
>   }
>   return 0;
> }{code}
>  
> I could not reproduce with another builder type



--
This message was sent by Atlassian Jira
(v8.20.1#820001)