首页 > 用户发贴区 > 编程问题提问区 > 新手问题 动态内存 谢谢
2008
07-22

新手问题 动态内存 谢谢

题目:输入10个数字,把最小数字和第一个交换,最大数字和最后一个交换,用动态分配内存实现!


动态分配内存我第一次用不会用,下面是我写的程序,编译有两个警告,没有错误,但是执行是有错(请大家指点谢谢啦)


上面说


      “0×00401060″指令引用的”0xcccccccc“内存。该内存不能”writen“


# include <stdio.h>
# include <stdlib.h>
# define N 10


void fun(void)
{
 int i;
 int *p,*pmax,*pmin;
 p=(int *)calloc(N,sizeof(int));
 scanf(“%d”,p);
 *pmin=*p;
 *pmax=*p;
 for (i=1;i<=N-1;i++)
 {
  scanf(“%d”,(p+i));
  if (*(p+i)>*pmax) *pmax=*(p+i);
  if (*(p+i)<*pmin) *pmin=*(p+i);
 }
 *p=*pmin;
 *(p+N-1)=*pmax;
 for(i=1;i<=N-1;i++)
 {
  printf(“%d”,*(p+i));
 }
 printf(“\n”);
 free(p);


}


int main ()
{
 fun();
 return 0;
}


 


 


新手问题 动态内存 谢谢》有 3 条评论

  1. whos 说:

    # include <stdio.h>
    # include <stdlib.h>
    # define N 10

    void fun(void)
    {
     int i;
     int *p,*pmax,*pmin,*head,t;
     clrscr();
     p=(int *)calloc(N,sizeof(int));
     head=p;
     scanf(“%d”,p);
     pmin=p;
     pmax=p;
     for (i=1;i<=N-1;i++)
     {
      scanf(“%d”,++p);
      if (*p>*pmax) pmax=p;
      if (*p<*pmin) pmin=p;
     }
     printf(“\n”);
     if(*head==*pmax&&*p==*pmin)
     {
     t=*p;*p=*pmax;*head=t;
     for(i=1;i<=N-1;i++,p–);
     }
     else
     {
     t=*p;*p=*pmax;*pmax=t;
     for(i=1;i<=N-1;i++,p–);
     t=*p;*p=*pmin;*pmin=t;
      }
     for(i=0;i<=N-1;i++)
     {
      printf(“%d\n”,*p++);
     }

     free(p);

    }

    int main ()
    {
     fun();
     return 0;
    }

    有时测试数据会出现一点小错误

    不过不影响结果

  2. 三刀流d 说:

    收益,谢谢了

    我的程序大概就是这里错了

     *pmin=*p;
     *pmax=*p;

    pmax只是指针,没有开辟存储空间,不可以*pmax=*p;

  3. whos 说:

    如果第一个数是最大数,最后一个数是最小数的话就要用到程序里加的那个判断条件。

    还有题目要求是交换,如果按照你的程序就是覆盖而不是交换了。

    呵呵……

留下一个回复