我想将一个结构的值复制到另一个具有相同模板的结构。
下面是示例代码,其中struct list
是模板结构。调用func1()
必须将li
的内容复制到ref
。
但是执行复制时,会发生分段错误。我在哪里出错了?
foo.cpp
#include<iostream>
#include <cstdlib>
class bar
{
public:
void func1(const list& li);
};
void bar::func1(const list& li)
{
listref ref = nullptr;
ref = (listref)malloc(sizeof(listref));
ref->a = li.a;//segfault occurs here
ref->b = li.b;
ref->c = li.c;
ref->d = li.d;
}
foo.h
#include<iostream>
struct list
{
std::string a;
int b;
int c;
const char* d;
};
typedef struct list* listref;
main.cpp
#include <iostream>
#include "foo.h"
#include "foo.cpp"
int main()
{
list l1;
std::string temp = "alpha";
l1.a = "alphabet";
l1.b = 60;
l1.c = 43;
l1.d = temp.c_str();
bar b;
b.func1(l1);
return 0;
}
答案 0 :(得分:2)
您正在混合使用C和C ++概念,这会发生!!
您的类list
包含C ++类型std::string
的成员,这是一个复杂的类,具有您需要坚持的语义。
然后您对它执行malloc
!
即使您对malloc
的size参数是正确的(不是,您只是给它一个指针的大小),但这也不能正确地构造任何东西。应该是new
或std::make_unique
!
请勿混合使用C和C ++习惯用法。