首页 新闻 赞助 找找看

C语言动态数组增加长度后的内存分配释放问题,求高手指导,每行功能有注释

0
悬赏园豆:30 [待解决问题]

#include <iostream.h>

#include <stdlib.h>

int main()

int*n,*head;

int i,j,temp;

int k=0;//记录当前数组长度

int MAX=3;//设置数组个数

n=(int*)calloc(MAX,sizeof(int));//创建动态数组 

head=n;//记录不用增加动态数组长度时的头指针 

cin>>i;//输入数组元素的值   

while(i!=0&&k<MAX)

*n=i;//给当前数组元素赋值 

k++;//数组长度加一 

cin>>i;//输入下一个数组元素的值      

  if(k==MAX)//数组已满

  {   

  MAX=MAX+3;//重设数组长度 

    n=(int*)realloc(n,(MAX)*sizeof(int));//增加数组长度(调试时到这一句就中断)

     head=n;//记录新动态数组头指针   

  n=n+(MAX-4);//返回已赋好值的那个节点 

n++;//数组元素下移一位

}  

n=NULL;//把最后多下移一位的值悬空

n=head;//返回头指针

//下面的程序正确,数组不需要增加长度时就正确,一增加就错误

for(i=0;i<k-1;i++)  {   for(j=i+1;j<k;j++)   {    if(*n>*(n+1))    {     temp=*n;     *n=*(n+1);     *(n+1)=temp;    }    n++;   }   n=head;  }  n=head;  for(i=0;i<k;i++)  {   cout<<*n<<"\t";   n++;  }  n=head;  free(n);  return 0; }

zhengzhiqiang的主页 zhengzhiqiang | 初学一级 | 园豆:12
提问于:2014-04-04 00:30
< >
分享
所有回答(3)
0

帮顶。

喵喵喵猫 | 园豆:1742 (小虾三级) | 2014-04-04 09:20
0

realloc(n,(MAX)*sizeof(int))

因为你N的位置已经变了吧``我猜的,你换头指针试试

吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-04 09:28
0

 n=(int*)realloc(head,(MAX)*sizeof(int));//增加数组长度

zhengzhiqiang | 园豆:12 (初学一级) | 2014-04-07 19:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册