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++都是这样。
- struct类型的赋值
- struct的赋值技巧
- struct中字符串的赋值
- 【Objective-C】03-OC对象struct类型成员变量的赋值
- STRUCT以及VECTOR的赋值问题
- struct类型的内存占用
- go语言的struct类型
- boolean 类型的条件赋值
- 引用类型的赋值函数
- 赋值过程的类型转换
- Java子类型的赋值
- 赋值中类型的转换
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- struct结构赋值
- struct 赋值 初始化
- 由JTA分布式事务Timeout值引发的锁定及解决
- 反射
- java logging--java记录日志
- JavaScript事件冒泡简介及应用
- experiment : 字符串分解 on drv
- struct类型的赋值
- Hadooop sites
- Wax框架简明教程(1) 简介
- 设计模式之迭代器模式java实现代码
- Windows 下安装并配置 SVN 服务器全过程
- java基本概念(二)
- 提炼数据 数据处理
- 如何规范.net中的js开发(1)概念篇(更新版)
- WebService 实例应用