memcpy と memmove の違い:メモリ重複コピーの落とし穴
背景
アプリケーションを別のプラットフォームに移植した際、受信バッファから処理済みデータを memcpy で移動させたところ、メモリ上のデータが破壊される問題が発生した。
環境情報:
$ gcc -v
Using built-in specs.
...
gcc version 4.9.2 (Linx 4.9.2-10-linx1)
$ uname -a
Linux localhost 4.9.0-0.bpo.1-linx-security-amd64 #1 SMP ...
原則
memcpy と memmove ...
6月14日 16:15 投稿
C言語における主要なメモリ操作関数の解説と実装
memcpy は、指定されたバイト数に従ってソース領域からデスティネーション領域へデータを非破壊的に複製する関数です。以下はその自作実装例です:
void* my_memcpy(void* dst, const void* src, size_t n) {
if (!dst || !src) return NULL;
unsigned char* d = (unsigned char*)dst;
const unsigned char* s = (const unsigned char*)src;
for (size_t ...
6月4日 22:48 投稿
メモリ操作関数:memcpy, memmove, memset, memcmp
memcpyの使い方と実装
memcpyは、指定されたバイト数分のデータをソースからデスティネーションへコピーする関数です。特に文字列終端文字'\0'を特別扱いせず、純粋にバイト単位でコピーを行います。
使用時の注意点
コピー元とコピー先のメモリ領域が重複している場合、挙動は未定義です。
バイト単位でコピーするため、型の違いによる影響はありません(ただし無効なア ...
5月21日 22:18 投稿