作者ilway25 (唉唷喂)
看板EE_DSnP
标题Re: [心得] memcpy 和 memmove
时间Fri May 22 23:14:00 2009
※ 引述《ilway25 (唉唷喂)》之铭言:
: 今天在用这两个实作时,遇到一大堆问题,因此又想了一大堆...
: 以下是其中的一个想法:
: 以作业中的 AdtTestObj 来说,是没有的。
: 但是,如果那个 Class 的 assignment operator 有做事情的话,
: 用 memcpy 结果不得而知。
: 结论是:不可以用 memcpy。
: 但就这次作业而言,到底可不可以求速而用 memcpy 呢?
我指的是,如果我们不是放 AdtTestObj,
而是要把 adt 做得更通用的话,不应该用 memcpy 吧?
如下面的程式:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
string b;
{
string a = "test";
memcpy(&b, &a, sizeof(a));
}
string c = "123";
cout << b << endl;
return 0;
}
不但 cout 出 b 的内容变成 123,结束时还出现 double free。
所以我不打算在作业中用 memcpy or memmove @@
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.245.11
1F:推 goodword:我想会出错最大的原因应该是 string 内应该是char* 吧 05/22 23:27
2F:→ goodword:然後你的变数a 只在那个scope内 05/22 23:27
3F:→ goodword:然後又宣告一个变数c 当然c的位置就是用a的位置了 05/22 23:28
4F:→ goodword:我说错了 string a 的destructor 应该有把test delete掉 05/22 23:29
5F:→ ilway25:所以adt如果用memcpy,那麽我们放string进去,就会爆了!! 05/22 23:29
6F:→ goodword:然後123 又写上去同一块位置 但b又是复制4个过去 05/22 23:31
7F:→ goodword:所以最後1格 就double free了 在b的destructor 05/22 23:32
8F:→ goodword:嗯嗯 应该是这样 所以我在作业中也都没用那两个啊 05/22 23:32
9F:推 ric2k1:对耶... 嗯, 以後要改写了... 05/23 00:38