C-Style unsigned char parsing and manipulation
Your problem is here:
buf-&gt;str[ buflen ] = '\0';

You allocate a buffer (str) of buflen bytes.
This means you can index it (str) from 0 -&gt; (buflen-1).
Thus the accesses above is writing one past the end of the buffer and corrupting memory.
You probably meant:
buf-&gt;str[ len ] = '\0';

Since you are using C++ compiler. You should use std::vector&lt;viByte&gt; or std::basic_string&lt;viByte&gt;.
This kind of bug is easy to introduce and unless you have good unit test hard to find. So why not use a class that already is unit test and has had 10 years of millions of people lookign at it to make sure it works correctly.
Other comments:
Broken and illegal.
    buf-&gt;str = ( viByte* ) 0x1;

Wrong. buf-&gt;str is a pointer and it was expecting a unsigned integer (they are not the same). Use %p to print a pointer value.
    printf(&quot; Before viByteBuf_Prepend =&gt; %uc &quot;, buf-&gt;str);

Broken and illegal (0x2 is not yours)
    viByteBuf_Prepend( buf, 3, ( viByte* ) 0x2 );

No check for NULL. (calloc can return NULL when it fails).
    viByteBuf* buf = ( viByteBuf* ) calloc( sizeof( viByteBuf ), 1 );

Again no check for NULL.
    buf-&gt;str = ( viByte* ) calloc( sizeof( viByte ), buflen );

Is this really what you want? Buflen includes the portion with the '\0' character. You need to be consistent and decide if len does or does not include the null.
    buf-&gt;len = buflen;

As pointed out above (write past the end of the buffer).
    buf-&gt;str[ buflen ] = '\0';

How do you handle failure?
As pointed out above calloc can fail. How do you propagate that failure to the caller.
    viByteBuf* tmp = viByteBuf_New( totallen );

Why are you nulling the whole array. You are just about to write over it.
Seems like a complete waste of time.
    memset( tmp-&gt;str, 0, tmp-&gt;len );

Looks like this loop is trying to reverse the string in place.
Which will fail as by the time you overwrite the first half the second half is a copy of the back half. Luckily it completely fails because you don't actually use the index variable.
    for( i = 0; i &lt; buf-&gt;len; ++i )
    {

       index = ( buf-&gt;len - i ) - 1;

       *strpos = buf-&gt;str[ 0 ];
       ++strpos;
    }

Now that you have failed to reverse it. You then overwrite it again with 0 (presumably to cover up the failure to reverse it).
    memset( buf-&gt;str, 0, buf-&gt;len );

Illegal parameter to printf() again.
    printf( &quot;%uc\n&quot;, buf-&gt;str );

More copying for unknow reason.
    memcpy( buf-&gt;str, tmp-&gt;str, tmp-&gt;len );

This code is so full of bugs. It has no write to work.