[英]std::transform not working for statically allocated string
有人可以帮助我理解为什么这不起作用吗?
#include <vector>
#include <algorithm>
using namespace std;
struct person {
int age;
char name[30];
};
int main()
{
vector<person> persons(2);
vector<char*> names(2);
persons[0].age = 1;
strcpy_s(persons[0].name, "mike");
persons[1].age = 11;
strcpy_s(persons[1].name, "pol");
transform(persons.begin(), persons.end(), names.begin(),
[](person p) -> char* {return p.name; });
// ... names gets the same wrong pointer for both elements
}
[编辑以消除不必要的错误猜测]
在这个拉姆达:
[](person p) -> char* { return p.name; });
你在做每一个元素的副本persons
,然后返回一个指针到副本中的一员。 一旦您从 lambda 返回,这就会悬空,当您稍后使用指针时调用未定义的行为..
相反,您可以返回一个指向引用成员的指针:
[](person & p) -> char* { return p.name; });
// ^
只要persons
指向相同的底层内存,这些指针就是有效的。 以一种使指向它的指针无效的方式修改persons
显然会使names
的指针无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.