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方法在执行 ...
随机推荐
- 用redis实现跨服务器session(转)
这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两 ...
- Ubuntu16.04上安装mongoDB
安装MongoDB 现在最新版本是3.4 1: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F37303 ...
- leetcode第一刷_Symmetric Tree
必须承认,一開始这道题我是不会做的.由于我心目中的树遍历仅仅能用一个节点发起.多么天真而无知. 我想不通如何同一时候遍历两颗子树.由于根节点一定是一个啊.但是,作为对称轴上的它.从一開始就不应该被考虑 ...
- python--简易员工信息系统编写
补充内容:eval 将字符串变成变量名locals 看输入的是否是字典中的一个keyfunc.__name____怎么看变量名的数据类型斐波那契数列 li=[1,1] while li[-1]&l ...
- PythonCookBook笔记——数据结构和算法
数据结构和算法 解包赋值 p = [1, 2, 3] a, b, c = p # _表示被丢弃的值 _, d, _ = p # 可变长解包 *a, b = p # 字串切割解包 line = 'nob ...
- new和delete的基本用法
前言 new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活.如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧. 功能一:动态管理单变量/对象空间 下面例子使用new为单 ...
- Python使用Mysql过程中一些错误
Python使用Mysql过程中一些错误 ssh登录远程服务器 ssh ubuntu@xxx.xxx.xx.xx 第一:ubuntu终端中登录Mysql mysql -uroot -p 然后输入密码即 ...
- 九度OJ 1133:学分绩点 (加权平均数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1333 解决:702 题目描述: 北京大学对本科生的成绩施行平均学分绩点制(GPA).既将学生的实际考分根据不同的学科的不同学分按一定的公式 ...
- J++ C#
J++几乎有与Java相同的编程语言和虚拟机.
- TEdit的创建与显示过程
-------------------------- 分析TEdit的创建与显示过程 --------------------------TCustomEdit = class(TWinControl ...