On Monday, 29 April 2019 at 00:53:34 UTC, Paul Backus wrote:
On Sunday, 28 April 2019 at 23:10:24 UTC, Ferhat Kurtulmuş wrote:
You are right. I am rewriting the things using mallocs, and will use core.stdc.stdlib.free on d side. I am not sure if I can use core.stdc.stdlib.free to destroy arrays allocated with new op.

core.stdc.stdlib.free is (as the name suggests) the standard C `free` function. As such, it can only be used to free memory allocated by the standard C functions `malloc`, `calloc`, and `realloc`. This is the same in D as it is in C and C++.

Thank you. It is now like:

/* c/cpp side */
extern (C) void deleteArr(void* arr);

void deleteArr(void* arr){
    delete[] arr;
}

struct IntVector Subdiv2D_GetLeadingEdgeList(Subdiv2D sd){
    std::vector<int> iv;
    sd->getLeadingEdgeList(iv);
    int *cintv = new int[iv.size()];
    for(size_t i=0; i < iv.size(); i++){
        cintv[i] = iv[i];
    }
    IntVector ret = {cintv, (int)iv.size()};
    return ret;
};

/* c/cpp side */

...
int[] getLeadingEdgeList(){ // d function
    IntVector intv = Subdiv2D_GetLeadingEdgeList(this);
    int[] ret = intv.val[0..intv.length].dup;
    deleteArr(intv.val);
    return ret;
}
...

Reply via email to