use of C memmove

spir denis.spir at gmail.com
Thu Apr 7 10:09:05 PDT 2011


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



More information about the Digitalmars-d-learn mailing list