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

Reply via email to