一个动态数组的复制与string的赋值问题。。

xychzh 2010-05-24 06:50:04

struct stItem
{
string m_Text;
};


int main()
{
stItem* pItem = new stItem[3];
pItem[0].m_Text = "00";
pItem[1].m_Text = "11";
pItem[2].m_Text = "22";

stItem* temp = new stItem[4];
memcpy(temp, pItem, sizeof(stItem)*4);
delete [] pItem;
pItem = temp;

pItem[3].m_Text = "33";

system("pause");
return 0;
}


运行发生异常。
我加了句:memset(temp, 0, sizeof(stItem)*4) 还是会异常中断。

1:何故???
2:怎么解决
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xychzh 的回复:]
引用 3 楼 pengzhixi 的回复:
不要把C里面那套全搬到 C++里面来。你会发现很吃亏的。


那有什么别的方法拷贝这个动态数组??(必须要有string)
[/Quote]

请一个个赋值。
xychzh 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
不要把C里面那套全搬到 C++里面来。你会发现很吃亏的。
[/Quote]

只能一个一个拷贝 ??
pengzhixi 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 falcomavin 的回复:]
引用 4 楼 xychzh 的回复:
引用 2 楼 falcomavin 的回复:
memcpy(temp, pItem, sizeof(stItem)*4);
pitem只分配了3的内存,你拷贝4的内存过去...


这应该是可以的。


1L说的很好,这两个函数都是极快的直接内存操作,只能用于内置类型
[/Quote]

确切的说是POD类型
adamwyb 2010-05-24
  • 打赏
  • 举报
回复
问题出在 memcpy(temp, pItem, sizeof(stItem)*4);
你可以看下函数原型:
void *memcpy( void *dest, const void *src, size_t count );
pItem的第四个为空,也就是你把原来temp申请的第四个空间(temp[3])又赋值为空了,(当然,同时出现了一个sizeof(string)大小的内存泄露),那么你temp[3]没有申请空间,赋值就出错了
黑娃 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xychzh 的回复:]
引用 2 楼 falcomavin 的回复:
memcpy(temp, pItem, sizeof(stItem)*4);
pitem只分配了3的内存,你拷贝4的内存过去...


这应该是可以的。
[/Quote]

1L说的很好,这两个函数都是极快的直接内存操作,只能用于内置类型
xychzh 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
不要把C里面那套全搬到 C++里面来。你会发现很吃亏的。
[/Quote]

那有什么别的方法拷贝这个动态数组??(必须要有string)
xychzh 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 falcomavin 的回复:]
memcpy(temp, pItem, sizeof(stItem)*4);
pitem只分配了3的内存,你拷贝4的内存过去...
[/Quote]

这应该是可以的。
pengzhixi 2010-05-24
  • 打赏
  • 举报
回复
不要把C里面那套全搬到 C++里面来。你会发现很吃亏的。
黑娃 2010-05-24
  • 打赏
  • 举报
回复
memcpy(temp, pItem, sizeof(stItem)*4);
pitem只分配了3的内存,你拷贝4的内存过去...
pengzhixi 2010-05-24
  • 打赏
  • 举报
回复
对于含有string数据成员的结构体你用memcpy和memset基本上就是错误

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧