为什么这个memcpy不起作用?

sha*_*ib_ 1 c++ memcpy

所以我有以下代码,我想做的简化版本.我有一个带有成员变量的类,我希望将其设置为潜在的各种不同的数据类型,具体取决于具体情况(我只是为此测试制作了一个随机结构).我不断在memcpy函数上遇到seg错误,我不明白为什么.

 #include <cstdlib>
 #include <iostream>
 #include <assert.h>
 #include <string>
 #include <string.h>
 #include <stdio.h>
 using namespace std;

struct product
{
        int price;
        string name;
};


class object
{
public:
        void setData(void *ptr);
        void* data;
};


void object::setData(void *ptr)
{
        assert(ptr);
        memcpy(data, ptr, sizeof(ptr));
}


int main()
{
        product* bag;
        product ba;
        bag = &ba;
        bag->price = 5;
        bag->name = "bag";

        object test;
        test.setData(bag);

        cout<<test.data->name<<endl;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*eyA 5

您的代码有多个问题,但SIGSEGV的直接原因是以下行: memcpy(data, ptr, sizeof(ptr));它尝试将多个字节复制到未分配的指针中data.

在旁注中,看起来您正在尝试使用完全不合适的方法在C++中实现多态.