为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

关于数组动态分配空间问题

2017-09-19 2页 doc 15KB 10阅读

用户头像

is_686908

暂无简介

举报
关于数组动态分配空间问题问题还是出在对指针的操作和对calloc  realloc分配空间函数的理解上! 具体程序中的红色部分 #include #include int main() {     int*n,*head,*p;   //定义了一个新的指针,用于记录重新分配空间时得到的连续空间的首地址,因为重新分配时首先是在原连续空间上进行扩展,如果后面的连续空间足够,则新分配的连续空间的地址与原来的地址是一样的。但是更可能的是:扩展时后面的连续空间不够,那么就需要重新找一块足够大的连续空间分配(同时把原来小的连续空间释放),因此,必须有一个新指...
关于数组动态分配空间问题
问题还是出在对指针的操作和对calloc  realloc分配空间函数的理解上! 具体程序中的红色部分 #include #include int main() {     int*n,*head,*p;   //定义了一个新的指针,用于重新分配空间时得到的连续空间的首地址,因为重新分配时首先是在原连续空间上进行扩展,如果后面的连续空间足够,则新分配的连续空间的地址与原来的地址是一样的。但是更可能的是:扩展时后面的连续空间不够,那么就需要重新找一块足够大的连续空间分配(同时把原来小的连续空间释放),因此,必须有一个新指针来记录重新分配的地址,以避免与原来的地址冲突造成指针操作错误。     int i,j,temp;     int k=0;//记录当前数组长度     int MAX=3;//设置数组个数     n=(int*)calloc(MAX,sizeof(int));//创建动态数组     head=n;//记录不用增加动态数组长度时的头指针     cin>>i;//输入数组元素的值     while(i!=0&&k>i;//输入下一个数组元素的值         if(k==MAX)//数组已满         {           MAX=MAX+3;//重设数组长度           p=(int*)realloc(head,(MAX)*sizeof(int));//增加数组长度(调试时到这一句就中断)。这里把n修改为head,是因为你使用的n已经通过n++移动了,不是原来空间的首地址了。P记录新分配的更大连续空间的首地址           head=p;//记录新动态数组头指针,head总是记录数组连续空间的首地址           n=head+(MAX-4);//返回已赋好值的那个节点,n记录着原来已经读入进来的数组元素,这个位置都是以head为相对位置的。         }         n++;//数组元素下移一位     }    // 下面操作语句完全可以不要,因为数组占用的连续空间的首地址在head中     n=NULL;//把最后多下移一位的值悬空      n=head;    //返回头指针,这个操作应该是让n指向数组的开始,为了下面排序做准备     //下面的程序正确,数组不需要增加长度时就正确,一增加就错误     for(i=0;i*(n+1))             {                 temp=*n;                 *n=*(n+1);                 *(n+1)=temp;             }             n++;         }         n=head;     }     n=head;     for(i=0;i
/
本文档为【关于数组动态分配空间问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索