rainymay 发表于 2013-12-8 15:57:57

c程序问题求解!

本帖最后由 rainymay 于 2013-12-8 16:57 编辑

#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
struct list {
   elemtype *list;
   int size;
   int maxsize;
};
void againmalloc(struct list *L)
{
    elemtype *p=realloc(L->list,(2*L->maxsize)*sizeof(elemtype));
    if(!p){
      printf("存储空间分配失败!");
      exit(1);
    }
    L->list=p;
    L->maxsize=2*L->maxsize;
}
void insertlastlist(struct list *L,elemtype x)
{
   if(L->size=L->maxsize){
      againmalloc(&L);
   }
   L->list=x;
   L->size++;
   return;
}
void initlist(struct list *L,int ms)
{
   if (ms<=0){
      printf("maxsize非法!");
      exit(1);
   }
   L->maxsize=ms;
   L->size=0;
   L->list=(elemtype*)malloc(ms*sizeof(elemtype));
   if(!L->list){
    printf("空间分配失败!");
    exit(1);
   }
   return ;
}
void insertposlist(struct list *L,int pos,elemtype x)
{
   int i;
   if(pos<1||pos>L->size+1){
      return 0;
   }
   if(L->size==L->maxsize){
      againmalloc(&L);
   }
   for(i=L->size-1;i>=pos-1;i--){
      L->list=L->list;

   }
   L->list=x;
   L->size++;
   return ;
}
void MergeList(struct list *La, struct list *Lb)
{
    int j=0,i=0,m=0;
    La->list=(elemtype *)realloc(La->list,(La->maxsize+Lb->maxsize)*sizeof(elemtype));
    La->maxsize=La->maxsize+Lb->maxsize;
    for(i;i<La->size+Lb->size;i++){
      if(La->list<Lb->list){
            i++;
      }
      else if(La->list>=Lb->list){
            insertposlist(La, i,Lb->list);
            j++;
      }
    }
    for(m;m<=i;m++){
      printf("%d ",&La->list);
   }
    return ;
}
void main()
{
    int i,k;
    int a={0,2,4,6,8};
    int b={1,3,5,7,9};
    struct list La;
    struct list Lb;
    initlist(&La,5);
    initlist(&Lb,5);
    for(k=0;k<5;k++){
      insertlastlist(&La,a);
      insertlastlist(&Lb,b);
    }
    MergeList(&La,&Lb);
    getchar();
    return 0;

}
显示内存分配失败,就大神解惑!

maomingkun 发表于 2013-12-8 17:01:41

下一次把字体写正,这样看着很别扭,而且看不清楚!

不正常人类 发表于 2013-12-8 17:49:51

什么问题??

悲哀 发表于 2013-12-8 19:36:13

我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {elemtype *list;.......}的名字和成员的名字一样不会错吗..
还有void MergeList(struct list *La, struct list *Lb) 这个函数里 if(La->list<Lb->list)是在拿一个指针和一个整数比较吗...
然后...没有然后了..

Sheamus 发表于 2013-12-8 20:24:17

这是解决什么问题的都不知道!就说解决问题?先把自己逻辑说清楚!看代码很累的!

rainymay 发表于 2013-12-8 20:43:23

Sheamus 发表于 2013-12-8 20:24 static/image/common/back.gif
这是解决什么问题的都不知道!就说解决问题?先把自己逻辑说清楚!看代码很累的!

最后说了,运行时显示内存空间分配失败,但我不知道错在哪

rainymay 发表于 2013-12-8 20:48:37

悲哀 发表于 2013-12-8 19:36 static/image/common/back.gif
我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {elemtype *list;.......}的名字和成 ...

结构体的设置不好,但没错吧,后面那个我代码里是a->list【i】,不知道复制上去怎么就没了

rainymay 发表于 2013-12-8 20:49:40

maomingkun 发表于 2013-12-8 17:01 static/image/common/back.gif
下一次把字体写正,这样看着很别扭,而且看不清楚!

下次我会注意的,那你能解答我的问题吗,为什么运行时显示内存分配错误

rainymay 发表于 2013-12-8 20:50:12

不正常人类 发表于 2013-12-8 17:49 static/image/common/back.gif
什么问题??

运行时显示内存分配失败

maverick 发表于 2013-12-8 21:07:09

进入调试模式,自己一步一步调去吧,这样收获大。

8612328 发表于 2013-12-8 21:09:16

屌丝路过···············

悲哀 发表于 2013-12-9 09:52:59

rainymay 发表于 2013-12-8 20:48 static/image/common/back.gif
结构体的设置不好,但没错吧,后面那个我代码里是a->list【i】,不知道复制上去怎么就没了

把成员名称改改吧... 还有void againmalloc(struct list *L)函数里realloc函数都没有(int *)
void MergeList(struct list *La, struct list *Lb)函数里 for(i;i<La->size+Lb->size;i++) 的i++和if(La->list<Lb->list){ i++; } 造成i自加两次.. 是你的本意吗..
啊啊啊...编译都没通过...   这堆代码是要按大小插入数组吗??

小亮1201 发表于 2013-12-9 10:03:18

楼主这代码好乱啦,代码里一堆的错误,思路又不清晰。不想看了

阿莫西林_ 发表于 2013-12-9 14:49:20

尝试了下失败了...

北林之中 发表于 2013-12-9 20:14:42

顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函数中,   
if(L->size=L->maxsize)
{      
      againmalloc(&L);
}
判断条件有问题,还有againmalloc函数的参数有问题,直接用L就行,不用取址运算符
2. insertposlist函数中
   for(i=L->size-1;i>=pos-1;i--){
      L->list=L->list;

   }
   L->list=x;
这里的L->list需改为L->list,后面也有同样的问题,要改一下
3.MergeList函数
for(i;i<La->size+Lb->size;i++){
      if(La->list<Lb->list){
            i++;
      }
      else if(La->list>=Lb->list){
            insertposlist(La, i,Lb->list);
            j++;
      }
    }
中if语句中的i++需去掉,重复加了。同样,有上面说的问题。
    for(m;m<=i;m++){
      printf("%d ",&La->list);
   }
printf语句中,把取址运算符去掉
还有 ,整个函数中逻辑不够严谨,应该加入边界的判定处理,当循环执行插入排序时,要是原先La->list或Lb->list指向的数据结构最后一个数据元素执行完了,需要怎么处理。

rainymay 发表于 2013-12-9 21:19:09

北林之中 发表于 2013-12-9 20:14 static/image/common/back.gif
顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函 ...

不好意思,我的代码没完善好久拿出来了,但我今天就边界问题修改了一下还是有问题,如果可以的话加一下qq,万分感谢!

风涯 发表于 2013-12-9 22:14:08

完全不知道在说什么

pcfate 发表于 2013-12-11 13:55:39

什么情况。。回复就有奖励!!!!!!!!!!!
页: [1]
查看完整版本: c程序问题求解!