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方法在执行 ...
随机推荐
- PCIE、UART、HDA、I2C、SMBUS、SPI、eSPI、USB、PS2、CAN、SDIO等数据传输协议简介
M.2 wife一般支持USB.SDIO.PCIE三种传输 1.摄像头 (1)MIPI CSI (2)USB mipi摄像头模组IC简单便宜(小),应为一般把ADC解码在CPU端. MIPI摄像头简介 ...
- Unsupported major.minor version (jdk版本错误)解决方案 办法
如果你遇到了 Unsupported major.minor version ,请认真看一下,说不定会有帮助. 我花两个小时总结的经验,你可能10分钟就得到了. ^**^ 一.错误现象: 当改变了jd ...
- caffe搭建--opensuse13.2上搭建caffe开发环境
第一部分:参考一下内容.将sudo 替换成zypper即可. --------------------------------------------这部分参照以下官网内容-------------- ...
- iOS 后台返回json解析出现的null的解决办法
在后台返回值为Null为空时,我们代码没有判断时,程序就会崩溃.当时一直很疑惑是为啥,后来发现是数据问题,由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据.当我们通 ...
- 个人开发者帐号--我是如何实现在另一台mac上真机调试的
本文转载至 : http://blog.csdn.net/chenyong05314/article/details/8689534 注:本人有一台mac电脑,之前申请开发者帐号的时候直接就是在这 ...
- SAM4E单片机之旅——3、LED闪烁之定时器中断
让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高 ...
- EasyRTMP内置进入摄像机中实现网络推流直播摄像机的功能
本文转自博客:http://blog.csdn.net/jinlong0603/article/details/57468084 在前面的<如何用传统摄像机实现直接对接平台,类似于海康萤石.大华 ...
- EasyDarwin开源流媒体音视频云平台遇到的奇葩问题:内网运行正常,公网流媒体不通
最近在帮助EasyDarwin的用户部署EasyNVR+EasyDarwin云平台+EasyClient方案的过程中,遇到一个问题,EasyNVR分布在用户各地区现场的内网中,EasyDarwin云平 ...
- Winform拖拽改变无边框窗体大小
大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定 ...
- docker: Dockerfile命令介绍
前一章介绍了Dockerfile创建镜像的方法,Dockerfile文件都是一些指令,因此要掌握Dockerfile就必须了解这些指令.这一章就介绍下Dockerfile的指令. From: 功能为指 ...