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(); //可以直接赋值,但是newnode
newnode1 = 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->city
printf("%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++都是这样。