C语言编程问题,求高手指教。我错在哪里

/*编写一个函数,要求这个函数能够在一个有序的数组中间插入用户从键盘键入的一个新的数,要求插入后的数组任然有序,
并编写主程序完成对该函数的调用,要求该程序能实现任意个数的插入,任意个由用户通过键盘输入数字确定,每次插入一个数。*/
#include <stdio.h>

#include <stdlib.h>
void paixu(int*p,int num); //函数声明

void main()
{
int *p=NULL,n,m,k,s,i;
printf("请输入数组元素的个数:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入数组元素的初始值:"); /*输入元素的初始值*/
for(i=0;i<n;i++)
scanf("%d",p+i);
paixu(p,n);
printf("你输入的数组经过排序后为:");
for(i=0;i<n;i++)
printf("%d ",p[i]);

printf("请输入你要插入的数据个数:");
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);
paixu(p,m+n);
printf("插入这几个数后排序后为:");
for(s=0;s<n+m;s++)
printf("%d ",p[s]);

}

void paixu(int *p,int num) //定义排序函数
{
int i,j,t;
for(i=0;i<num;i++)
{
for(j=0;j<num-i-1;j++)
if(p[j]>p[j+1])
{
t=p[j];

p[j]=p[j+1];

p[j+1]=t;
}
}
}

//这里不能在这样重新申请空间了,申请之后前面的n个数就不是你输入的n个数了
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);//这里改为p+n+k;

其他的你自己在调试一下……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-28
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
这句操作结束后,你原来的空间丢失了!!!!!重新定义一个指针来操作吧
相似回答