GC seems to crash my C-code function

frame frame86 at live.com
Thu Sep 16 10:28:37 UTC 2021


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)
- All allocations made in C-translated-code are still 
calloc/malloc `ed
- Even if I disable the GC before calling the function and just 
enable it after there will be an incorrect result
- Data passed to the function belongs to a struct and the 
function is called in a member function and is always correct

The main public function accepts a char* and returns a char*. 
Signature is like this:
```d
char* fun(ref int, ref int, size_t, const char*, out int, out 
int, out int, uint);
```
Input paramter gets the pointer from char[] `.ptr` property (and 
length must be supplied too).


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.



More information about the Digitalmars-d-learn mailing list