Простая реализация memcpy Segfaults

Я работаю для класса ОС и по какой-то причине bcc нуждается в memcpy, хотя я не вызывал его в коде и он недоступен, поэтому я запускаю свой собственный, однако он продолжает segfault `

void memcpy( void* destination, void* source, size_t bytes )
{
        size_t i = 0;
        char* destination__ = ( char* ) destination;
        char* source__ = ( char* ) source;
        if( !( destination__ == source__ ) )
        {
                for( ; i < bytes; ++i )
                        destination__[ i ] = source__[ i ];
        }
}

Кажется, это segfault, и я не уверен, почему, он отлично работает, когда все распределено, но не для чего-то вроде следующего.

`

char* foo = "Hello";
char* bar = "Goodbye";
memcpy( bar, foo, 5 );

У меня такое ощущение, что это потому, что foo и bar, вероятно, являются глобальными данными, и это как-то связано с этим, но я не уверен. Я бы не спрашивал, если бы не тот факт, что я нашел другие реализации, которые являются тот же/аналогично в Интернете в других местах. Он падает при компиляции с помощью обычного gcc, который я использую для проверки вне сборки OS Im, которая не имеет диагностики. Я в замешательстве, почему это происходит.


person The Floating Brain    schedule 27.12.2018    source источник
comment
Будет ли все еще segfault, если вы объявите свои строки как char[], а не char*? Я думаю, проблема в том, что эти строки были помещены в память, доступную только для чтения. И я думаю, что это дубликат, но я еще не нашел оригинал   -  person Tim Randall    schedule 27.12.2018
comment
@xing Будут ли стандартные реализации memcpy аварийно завершать работу, когда это произойдет? Благодаря проницательности Time Randall я закрою вопрос, если это произойдет.   -  person The Floating Brain    schedule 27.12.2018
comment
@Tim Randall Нет, если я это сделаю, это не вылетит.   -  person The Floating Brain    schedule 27.12.2018
comment
@TheFloatingBrain Это не ваша реализация memcpy сломана, а ваш тестовый код.   -  person Tim Randall    schedule 27.12.2018
comment
Поведение вашего тестового драйвера не определено. Вы не можете изменять строковые литералы.   -  person SergeyA    schedule 27.12.2018
comment
Всем привет, я только что протестировал стандартный memcpy в этом случае, и он тоже дает ошибки. Спасибо за вашу помощь.   -  person The Floating Brain    schedule 27.12.2018