【发布时间】:2018-09-08 11:02:52
【问题描述】:
cpp新手,不明白怎么回事:
void addElem(vector<someCustomByteType> *result, string str_to_add) {
someCustomByteType *elem = (someCustomByteType*)str_to_add.data();
int elem_size = str_to_add.size();
memcpy(&(*result).back(), elem, elem_size);
}
int main(int argc, _TCHAR* argv[])
{
vector<someCustomByteType> vec(5);
vector<someCustomByteType> *vec_ptr = &vec;
addElem(signed_string_ptr, "abcd");
return 0;
}
外面,里面:
向量外部没有改变。但 memcpy 有效。这是怎么回事? 谢谢!
【问题讨论】:
-
请发一个合适的minimal reproducible example。除此之外,我建议您在编译时启用 all 和 extra 警告。看看会带来什么。
-
memcpy覆盖现有内存。它不会向向量添加新内存。 -
back()返回对向量中最后一个元素的引用,然后memcpy继续覆盖它后面的内存中的所有内容,破坏所有可见的内容。只有幸运才能防止您的代码崩溃。 -
@user2501323 为什么向量是通过指针的方式传给函数的?
-
@StoryTeller,按你说的编辑。
标签: c++ string pointers vector append