memcpy拷贝出现报错free() invalid pointer
memcpy浅拷贝使用注意事项,但是容易忽略memcpy不能拷贝含有类类型的任何成员。
·
本蒻苟发文,有任何不足欢迎大佬们进行交流和斧正~(^∀^●)ノシ
函数原型:void *memcpy(void *dest, const void *src, size_t n)
memcpy想必大家都经常用,但是容易忽略memcpy不能拷贝含有类类型的任何成员
下面将分类说明:
a) memcpy 是按字节拷贝的,与 strlen 搭配使用容易出错
//下述代码只拷贝了 abcde ,没有拷贝 ‘\0’,strlen遇到 '\0' 就结束
char c1[10] = "abcde";
char c2[10];
memcpy(c2, c1, strlen(c1));
//以下正确拷贝做法
memcpy(c2, c1, sizeof c1);
b) 不能拷贝 string 类型、含指针的结构体、结构体数组、自定义类等
原因:memcpy属于简单的浅拷贝,即对指针进行拷贝只是仅仅的获取其中指向的数据地址,类中的指针指向的内容无法进行memcpy直接拷贝
举个栗子:
//下面的 memcpy 将会拷贝失败
struct Person{
string name;
int age;
}person;
int main(){
string str = "Hello World"
memcpy(person.name, str, sizeof str);
return 0;
}
因为 sizeof(string) 只是求了固定大小和成员的内存和,而没有求 string 内部指针指向的存字符的那一段内存,所以拷贝出错。
更多推荐




所有评论(0)