将一个结构的值复制到另一个

时间:2019-06-25 12:37:43

标签: c++ struct

我想将一个结构的值复制到另一个具有相同模板的结构。 下面是示例代码,其中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;
}

1 个答案:

答案 0 :(得分:2)

您正在混合使用C和C ++概念,这会发生!!

您的类list包含C ++类型std::string的成员,这是一个复杂的类,具有您需要坚持的语义。

然后您对它执行malloc

即使您对malloc的size参数是正确的(不是,您只是给它一个指针的大小),但这也不能正确地构造任何东西。应该是newstd::make_unique

请勿混合使用C和C ++习惯用法。