知识大全 程序编译之mallocandrealloc

Posted 地址

篇首语:少年意气强不羁,虎胁插翼白日飞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 程序编译之mallocandrealloc相关的知识,希望对你有一定的参考价值。

首先看个问题程序(这里用的是TC编译器)   #include stdlib h   #include stdio h   void main()    int *i;  i=(int *)malloc(sizeof(int));  *i= ;  *(i+ )= ;  printf( %x|%d\\n i *i);  printf( %x|%d i+ *(i+ ));    输出的结果是    fc|    fe|   这个程序编译通过 运行正常 说它有问题 问题出在哪呢?    首先通过malloc 建了一个大小为 的堆   i指向的地址是 fc i+ 指向的地址是 fc+sizeof(int)= fe  但是地址 fe是不受保护的 因为它不是机器分配给i+ 的 随时会被其他变量占用     正确的做法是  #include stdlib h   #include stdio h   void main()    int *i;  i=(int *)malloc(sizeof(int));  *i= ;  i=(int *)realloc(i *sizeof(int));  *(i+ )= ;  printf( %x|%d\\n i *i);  printf( %x|%d i+ *(i+ ));    realloc 可以对给定的指针所指的空间进行扩大或者缩小 无论是扩张或是缩小 原有内存的中内容将保持不变 当然 对于缩小 则被缩小的那一部分的内容会丢失 realloc 并不保证调整后的内存空间和原来的内存空间保持同一内存地址 相反 realloc 返回的指针很可能指向一个新的地址   所以 在代码中 我们必须将realloc返回的值 重新赋值给 p :  p = (int *) realloc (p sizeof(int) * );    甚至 你可以传一个空指针( )给 realloc 则此时realloc 作用完全相当于malloc   int* p = (int *) realloc ( sizeof(int) * ); //分配一个全新的内存空间     这一行 作用完全等同于   int* p = (int *) malloc(sizeof(int) * );    『附注 TC编译器里sizeof(int)= VC里面sizeof(int)=   char型在两个编译器里是一样的 都是 个字节( 位)』    calloc与malloc相似 参数nelem为申请地址的单位元素长度 elsize为元素个数 如:  char* p;  p=(char*)calloc(sizeof(char) );  这个例子与上一个效果相同 cha138/Article/program/SQL/201311/11184

相关参考

编译程序是__的软件

编译程序是_____的软件。A、对目标程序装配连接B、将高级语言程序翻译成等价的机器语言程序C、对源程序边扫描边翻译执行D、将汇编语言程序翻译成机器语言程序答案:B解析:编译程序的功能是把高级语言书写

知识大全 编译程序可发现源程序全部的什么错误和部分的什么错误

编译程序可发现源程序全部的什么错误和部分的什么错误编译程序可发现源程序全部的“语法”错误和部分的“语义”错误。特意找了详细解释帮你理解:用户编写的源程序不可避免的会有一些错误,这些错误大致可以分为静态

知识大全 程序语言,操作系统,编译器三者之间有何关系

程序语言,操作系统,编译器三者之间有何关系?可以理解为程序语言需要在编译器里面进行编译,但是编辑器需要运行在操作系统里编程语言(programminglanguage),是用来定义计算机程序的形式语言

知识大全 使用ZendEncode编译PHP程序

使用ZendEncode编译PHP程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一ZendEn

知识大全 PHP程序编译中常见错误信息及解释

PHP程序编译中常见错误信息及解释  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!编写程序时无论怎样

知识大全 使用ant编译打包应用程序

  将一个简单的类(Sample)进行编译打包运行(传参数) 源文件  java源文件Samplejava  packagepowerwind;     importjavaxsw

知识大全 正确理解PHP程序编译时的错误信息

正确理解PHP程序编译时的错误信息  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们编写程序时

知识大全 使用ant编译打包应用程序[1]

  将一个简单的类(Sample)进行编译打包运行(传参数)  源文件java源文件Samplejava packagepowerwind; importjavaxswing*; 

知识大全 NET程序集反编译器Reflector

NET程序集反编译器Reflector  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 JForum 2.1.7 源程序编译草记

JForum2.1.7源程序编译草记  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n