diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index d15247c292..c4154996d7 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -183,6 +183,11 @@ pub fn (s string) replace(rep string, with string) string { // TODO PERF Allocating ints is expensive. Should be a stack array // Get locations of all reps within this string mut idxs := []int{} + defer { + unsafe { + idxs.free() + } + } mut idx := 0 for { idx = s.index_after(rep, idx) diff --git a/vlib/v/tests/valgrind/1.strings_and_arrays.v b/vlib/v/tests/valgrind/1.strings_and_arrays.v index 77e427afed..71bd76aa94 100644 --- a/vlib/v/tests/valgrind/1.strings_and_arrays.v +++ b/vlib/v/tests/valgrind/1.strings_and_arrays.v @@ -61,12 +61,16 @@ fn str_inter() { } fn str_replace() { - s := 'hello world' + mut s := 'hello world' + s = s.replace('hello', 'hi') + println(s) + /* r := s.replace('hello', 'hi') cloned := s.replace('hello', 'hi').clone() cloned2 := r.clone() println(s) println(r) + */ } fn reassign_str() { @@ -154,7 +158,7 @@ fn main() { reassign_str() optional_str() optional_return() - // str_replace() + str_replace() if_cond() addition_with_tmp_expr() println('end')