Hello,

I'm trying to use C's memmove as a tool to delete or insert a slice from/into an array. But I cannot manage to do it: systematic segmentation fault.
What is wrong below?

import std.c.string : memmove;
// void *memmove(void *dest, const void *src, size_t n);

void moveEnd (E) (E[] elements, size_t start, int offset) {
    // Length must be known before possible extension.
    auto length = elements.length;

    // If move up, extend array to make place.
    if (offset > 0)
        elements.length += offset;

    // Move slice.
    auto dest = cast(void*)(&(elements[start + offset]));
    auto source = cast(void*)(&(elements[start]));
    size_t size = length - start;
    memmove(dest, source, size);    // segfault ***

    // If move down, compress array.
    if (offset < 0)
        elements.length += offset;
}

unittest {
    string s = "012--3456789";
    // Remove slice.
    s.moveEnd(5, -2);
    writeln(s);
}

Denis
--
_________________
vita es estrany
spir.wikidot.com

Reply via email to