On 9/16/21 6:28 AM, frame wrote:
I have C-code translated in D that acts sometimes incorrect if the GC
has made some collect. I would like to know why.
- Code runs correct if the GC collections are off
- There are no allocations within the C-translated-code except `throw
new` (but they are not called)
...
I didn't want to change the code much so I have some piece like that:
```d
// const char *s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]^_";
char* s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]^_".dup.ptr;
```
Could this cause the issue? But the pointer is not used outside the
function where it's created.
`dup` is a GC allocation. Are you using that in your C code? the GC
might be collecting that string.
You are better off to cast away the immutable (as long as you are 100%
sure the C code isn't writing to it), as the string literal will not be
collected.
-Steve