void* memcpy(void* dest, const void* src, size_t size) { const char* pSrc = static_cast<const char*>(src); char* pDest = static_cast<char*>(dest); if(pSrc == NULL || pDest == NULL) return NULL; // 要点 考虑内存重叠的问题 if(pDest >= pSrc && pDest <= pSrc + size) { for(size_t i = size-1; i<=0; i--) { pDest[i] = pSrc[i]; } } else { for(size_t i = 0; i<size; i++) { pDest[i] = pSrc[i]; } } return pDest; } 要点:考虑内存重叠问题 当我们malloc或者new的时候,我们是在虚拟内存上分配的空间,当我们使用这些空间的时候,虚拟内存要映射到物理内存又因为内存映射是多对一的,所以就有可能出现内存重叠