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之内存动态分配的更多相关文章

  1. 剑指offer 面试39题

    面试39题: 题目:数组中出现次数超过一半的数字 题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中 ...

  2. 使用malloc和free函数进行内存动态分配

    一.在学习c语言里面,内存分配这个话题非常有意思,因为我们平时在开发的时候,如果一不小心没注意内存释放的话,写的的程序很容易出错,所以今天就来回顾一下c语言里面的内存动态分配,下面我们先来看一个实例来 ...

  3. 面试问了解Linux内存管理吗?10张图给你安排的明明白白!

    文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天来带大家研究一下Linux内存管理.对于精通 CURD 的业务同学 ...

  4. 【足迹C++primer】39、动态内存与智能指针(3)

    动态内存与智能指针(3) /** * 功能:动态内存与智能指针 * 时间:2014年7月8日15:33:58 * 作者:cutter_point */ #include<iostream> ...

  5. 面试突击44:volatile 有什么用?

    volatile 是 Java 并发编程的重要组成部分,也是常见的面试题之一,它的主要作用有两个:保证内存的可见性和禁止指令重排序.下面我们具体来看这两个功能. 内存可见性 说到内存可见性问题就不得不 ...

  6. 内存动态分配之realloc(),malloc(),calloc()与new运算符

    1,malloc与free是C/C++的标准库函数,new/delete是C++的运算符,是C++面向对象的特征,它们都可用于申请动态内存和释放内存.2,对于非内部数据类型的对象而言,光用maloc/ ...

  7. c语言指针与结构体之内存动态分配

    struct dangdangtest { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; }; void main2() { //struct dan ...

  8. 面试01:解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

    栈的使用:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间. 队的使用:通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域 ...

  9. 面试之四:JVM内存区域分配

    1.程序计数器(线程私有)[不会OOM] 记录线程执行的代码位置,每个线程各自独有. 2.栈:虚拟机栈和本地方法栈(线程私有)[会OOM和StackOverflow] 虚拟机栈 每个JAVA方法在执行 ...

随机推荐

  1. ZYThumbnailTableView---堪比一个小型阅读App

    Demo github地址: https://github.com/liuzhiyi1992/ZYThumbnailTableView 原文地址:http://zyden.vicp.cc/zythum ...

  2. Oracle 【to_number】【instr】

    需求:对一个包含数字的字符串排序 search后参考了  http://www.cnblogs.com/m-cnblogs/archive/2012/03/30/2425938.html 截屏: (用 ...

  3. scp windows 和 linux 远程复制 (双向)

    一下命令在cmd中 从w -> l : scp D:\a.txt root@192.168.2.113:/home/a 从l -> w: scp root@192.168.2.113:/h ...

  4. centos7下MySQL的配置

    1. 下载mysql的repo源 wget http:.noarch.rpm 2. 安装mysql-community-release-el7-5.noarch.rpm包 rpm .noarch.rp ...

  5. asp识别手机端

    <script type="text/javascript"> var mobileAgent = new Array("iphone", &quo ...

  6. 高性能MySQL(二)

    MySQL基准测试 为什么需要benchmark 验证基于系统的假设,确认是否符合实际情况 重现系统中的某些异常行为,以解决它们 测试系统当前的运行情况,如果不清楚当前性能,就无法确认优化效果 模拟比 ...

  7. 从TFS中的现有项目复制一份作为新项目,导致提交的服务器无法加载

    解决方案: 1.编辑 .csproj文件,改为自己的名字 2.取消解绑

  8. extjs中新建窗体时,给窗体添加背景图片不显示问题之一

    1.在extjs中新建窗体时,给窗体添加背景图片不显示,例如下面的代码. 不显示的原因:因为设置了  layout: 'fit', Ext.create('Ext.Window', { title: ...

  9. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...

  10. lateral inhibition

    http://www.indiana.edu/~p1013447/dictionary/lat_i.htm [This means that neighboring visual neurons re ...