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 投稿