错误信息:Segmentation fault 段错误
struct Json_Pk* json_pk_dev_ptr= (struct Json_Pk*)malloc(sizeof(struct Json_Pk));
json_pk_dev_ptr=&json_pk_dev;
最终改为:
struct Json_Pk *json_pk_dev_ptr = new struct Json_Pk;
json_pk_dev_ptr=&json_pk_dev;
解析
原因:struct Json_Pk为自定义的结构, new/delete会调用对象的构造函数/析构函数以完成对象的构造/析构,而malloc则不会。所以malloc不能用于自定义的对象,因为不会自动调用构造函数,不会对成员进行初始化
对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。
网友评论