struct类型的赋值

来源:互联网 发布:数据库管理系统的发展 编辑:程序博客网 时间:2024/06/01 10:19

struct 类型变量赋值,一直感觉有危险,畏手畏脚。

 

 

#include<iostream>using namespace std;struct node{struct addr *ad;node *next;};struct addr{char *city;int code;};int main(){char *c = "beijing";char *city ; city = c;struct addr *ad = new addr(); ad->city = city;ad->code = 910293;struct node *newnode = new node();newnode->ad = ad;newnode->next = NULL;printf("%s %d\n",newnode->ad->city,newnode->ad->code);struct node *newnode1 = new node();//可以直接赋值,但是newnodenewnode1 = newnode;printf("%s %d\n",newnode1->ad->city,newnode1->ad->code);//没问题//delete []newnode;//将newnode内存撤销//printf("%s %d\n",newnode1->ad->city,newnode1->ad->code);//异常终止,struct node *newnode2 = new node();newnode2->ad = newnode->ad;printf("%s %d\n",newnode1->ad->city,newnode1->ad->code);//没问题delete []newnode->ad->city;//撤销newnode->ad->cityprintf("%d\n",newnode2->ad->code);//依然异常终止}

 

struct变量可以直接赋值,但是当结构体内有指针时就会不安全,因为直接赋值,使两个指针指向了同一块内存,当其中一个指针释放时,会导致另一个指针指向非法的位置。

 

对于上面的结构体该怎么赋值呢?

memcpy是一种方法:

        struct node *newnode3 = new node();memcpy(newnode3,newnode,sizeof(node));delete []newnode;//将newnode内存撤销printf("%s %d\n",newnode3->ad->city,newnode3->ad->code);


 

c和c++都是这样。



 

原创粉丝点击