c/c++面试39-44之内存动态分配
39 指针的初始化(二叉树排序),其中引入了双向链表
#include <stdio.h>
#include <stdlib.h> struct Tag_Node
{
struct Tag_Node *left;
struct Tag_Node *right;
int value;
};
typedef struct Tag_Node TNode; TNode* root = NULL; void append(int N);
void print(); int main()
{
append();
append();
append();
append();
append();
append();
append();
printf("head:%d\n", root->value);
print();
getchar();
} void append(int N)
{
TNode *NewNode = (TNode *)malloc(sizeof(TNode));
NewNode->value = N;
NewNode->left = NULL;//初始化这里很重要
NewNode->right = NULL; if (root == NULL)
{
root = NewNode;//就指向根节点
return;
}
else
{
TNode *temp = NULL;
temp = root;
while ((N >= temp->value&&temp->left != NULL)||(N<temp->value&&temp->right!=NULL))
{
while (N >= temp->value&&temp->left != NULL)
{
temp = temp->left;
}
while (N <= temp->value&&temp->right != NULL)
{
temp = temp->right;
}
}
if (N >= temp->value)
{
temp->left = NewNode;
NewNode->right = temp;//形成双向链表
}
else
{
temp->right = NewNode;
NewNode->left = temp;
}
return; }
} void print()
{
TNode* leftside = NULL; if (root == NULL)
{
printf("there is not any element");
return;
}
leftside = root->left; while ()
{
if (leftside->left == NULL)
{
break;
}
leftside = leftside->left;
}
while (leftside != NULL)
{
printf("%d ", leftside->value);
leftside = leftside->right;
}
}
40 有了malloc/free为什么还要new/delete
(1) malloc与free是c/c++标准库函数,new/delete是c++的运算符,都可以用于动态内存申请和释放
(2) 对于非内部数据类型对象而言,对象在消亡之前会自动执行析构函数。由于malloc是库函数不是运算符,不在编译器的控制权限之下,不能把执行构造和下强加于malloc上。
41 各种内存分配和释放的函数联系和区别
(1)malloc类型为(void *),记住强制类型转换,另外参数是size,表示在内存的动态存储区分配一块连续的长度为size的空间
(2)calloc(n,size)在内存动态存储区中分配n块长度为size自己的连续区域,返回首地址
(3)realloc(*ptr,size)蒋ptr内存大小增加到size,新增加的内存没有初始化
42 内存分配的方式有几种
(1)从静态存储区域分配。
(2)栈上创建。
(3)堆上分配,自己管理
43 什么是句柄
(1) 句柄是标识项目的,其中包括内存块,菜单等
(2)windows采用以虚拟内存为基础的操作系统。内存管理器需要不断的移动来满足应用程序的内存需要。移动地址就变化了,这样windows为各个应用程序腾出一部分地址用来专门的登记各个应用对象在内存中的地址变化,这个存储单元的位置的地址本身不变化。这样就相对可以间接的访问了。
44 指针与句柄有什么区别
(1)句柄所指的是一个很复杂的结构,很有可能是与系统相关的。可以想成是指向指针的指针。
(2)指针也可以指向一个非常复杂的结构,但是通常是自己定义的。
c/c++面试39-44之内存动态分配的更多相关文章
- 剑指offer 面试39题
面试39题: 题目:数组中出现次数超过一半的数字 题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中 ...
- 使用malloc和free函数进行内存动态分配
一.在学习c语言里面,内存分配这个话题非常有意思,因为我们平时在开发的时候,如果一不小心没注意内存释放的话,写的的程序很容易出错,所以今天就来回顾一下c语言里面的内存动态分配,下面我们先来看一个实例来 ...
- 面试问了解Linux内存管理吗?10张图给你安排的明明白白!
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天来带大家研究一下Linux内存管理.对于精通 CURD 的业务同学 ...
- 【足迹C++primer】39、动态内存与智能指针(3)
动态内存与智能指针(3) /** * 功能:动态内存与智能指针 * 时间:2014年7月8日15:33:58 * 作者:cutter_point */ #include<iostream> ...
- 面试突击44:volatile 有什么用?
volatile 是 Java 并发编程的重要组成部分,也是常见的面试题之一,它的主要作用有两个:保证内存的可见性和禁止指令重排序.下面我们具体来看这两个功能. 内存可见性 说到内存可见性问题就不得不 ...
- 内存动态分配之realloc(),malloc(),calloc()与new运算符
1,malloc与free是C/C++的标准库函数,new/delete是C++的运算符,是C++面向对象的特征,它们都可用于申请动态内存和释放内存.2,对于非内部数据类型的对象而言,光用maloc/ ...
- c语言指针与结构体之内存动态分配
struct dangdangtest { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; }; void main2() { //struct dan ...
- 面试01:解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
栈的使用:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间. 队的使用:通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域 ...
- 面试之四:JVM内存区域分配
1.程序计数器(线程私有)[不会OOM] 记录线程执行的代码位置,每个线程各自独有. 2.栈:虚拟机栈和本地方法栈(线程私有)[会OOM和StackOverflow] 虚拟机栈 每个JAVA方法在执行 ...
随机推荐
- vue详细操作目录-基础篇
目录结构:-lib-main.js -lib-vue.js index.html 每个网页第一个均为HTML页面,第二个为js文件(主要文件) 1.vue的安装以及语法介绍 2.v-for指令 3.v ...
- ubuntu安装交叉编译工具链
一.sudo su 切换到root用户权限 二.将arm-linux-gcc-4.3.2.tgz从windows拷贝到Linux /home/ttt/arm-linux-gcc-4.3.2.tgz ...
- Python自动生成文章
为了应付某些情况,需要做17份记录.虽然不很重要,但是17份完全雷同也不很好.大体看了一下,此记录大致分为四段.于是决定每段提供四种选项,每段四选一,拼凑成四段文字,存成一个文件.文件名就叫“XX记录 ...
- Oracle SQL_杂记
1. 查询当前用户角色,当前用户下的表权限以及所有用户表权限 desc user_role_privs;select * from user_role_privs; desc user_tab_pri ...
- Android活动条(actionbar)使用具体解释(一)
活动条(ActionBar)是Android3.0的重要更新之中的一个.ActionBar位于传统标题的位置,其主要提供了例如以下功能: >显示选项菜单的菜单项,即激昂菜单项显示 ...
- 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ
[BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...
- 同一世界服务器架构--Erlang游戏服务器
Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间 ...
- select version();desc mysql.user;
D:\wamp64\wamp\bin\mysql\mysql5.6.17\bin>mysql -hgoDev -uroot -ppasswordWarning: Using a password ...
- myeclipse10.0如何集成Git
现需要给myeclipse10.0集成git工具,经过搜索资料,现整理如下方法: myeclipse10.0对应的Git版本应该为:egit版本为2.3.1 下载地址:http://wiki.ecli ...
- mac shell命令连接mongo
1. 安装rebomongo 2. mongo 192.168.1.100/databasename -u lsg -p 123456 3.db.drawspecs.find({name:'prize ...