| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 599 人关注过本帖
标题:[求助]关于内存分配的问题
取消只看楼主 加入收藏
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:3 
[求助]关于内存分配的问题
#include<stdio.h>
//#include<malloc.h>
#include<stdlib.h>
#define ADDLIST 10
#define LIST_INIT_SIZE 100
typedef struct
{
        int *p;
        int length;       //表的长度
        int listsize;     // 表的实际大小
}*SqList;
void creatSqList(SqList r,int n)
{
     int i;
     int *q;
     r->length = 0;
     r->p = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
     q = r->p;
     if(r->p == NULL) exit(0);  //fail to assign storage
     for(i=0;i<n;i++)
     {
        printf("输入第%d个值:",i);
        scanf("%d",(r->p)++);
        r->length++;
     }
     r->p = q;
     r->listsize = LIST_INIT_SIZE; //assign size(at the begin)
}
/*void uniteSqList(SqList r1,SqList r2,SqList r3)
{
     int r1_last,r2_last;
     r3->listsize = r3->length = r1->length + r2->length;
     r3->p = (int *)malloc(r3->listsize*sizeof(int));
     if(r3->p==NULL)
     {
        printf("存储分配失败!");
        exit(0);
     }
     r1_last = r1->p+r1->length - 1;
     r2_last = r2->p+r2->length - 1;
     while(r1->p<=r1_last && r2->p<=r2_last)     //归并
     {
          if(*(r1->p)<*(r2->p))   *(r3->p)++ = *(r1->p)++;
          else  *(r3->p)++ = *(r2->p)++;
     }
     while(r1->p<=r1_last)     //insert the rest of element of r1
        *(r3->p++) = *r1->p++;
     while(r2->p<=r2_last)     //insert the rest of element of r1
        *(r3->p++) = *r2->p++;
}*/
void outputSqList(SqList r)
{
       int i;
       for(i=0;i<r->length;i++,r->p++)
       printf("%d",*r->p);
}
void destroyList(SqList r)
{
   free(r->p);
}
//此例子只能输入2个有序递增的元素
int main()
{
      SqList r1,r2,r3;
      int n = 4; // size
      printf("创建第一个线性表:\n");
      creatSqList(r1,n); //n是线性顺序表的长度
      outputSqList(r1);
      printf("创建第二个线性表:\n");
      //creatSqList(r2,n); //n是线性顺序表的长度
      //uniteSqList(r1,r2,r3);
      outputSqList(r1);
      printf("\n");
      //outputSqList(r2);
      printf("\n");
      //outputSqList(r3);
      printf("\n");
      //destroyList(r1);
      //destroyList(r2);
      //destroyList(r3);
      system("pause");
      return 0;
}
//  是不是 malloc 只能一次分配连续的内存, 多次分配就乱了地址呢?
有什么好的方法解决吗
搜索更多相关主题的帖子: 内存 
2005-09-07 13:06
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
能解释一下
typedef struct
{
        int *p;
        int length;       //表的长度
        int listsize;     // 表的实际大小
}*SqList

typedef struct
{
        int *p;
        int length;       //表的长度
        int listsize;     // 表的实际大小
}SqList           
的不同吗,  是不是加了*在sqlist前面, r1,r2就是相同的地址呢?

2005-09-09 09:53
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
我用.NET调试了,*SqList的r1,r2居然是同一个地址。(执行输入r1后就异常结束)
但是别人说SqList里的r1,r2不是同一个地址, (可以输入2个表)
结构体里有指针啊,如果不用,*SqList, 那要用指向指针的指针怎么解决?(我知道用引用可以解决)
你的代码有些乱码,我不能直接拿去编译,而且源程序我也删除了, 弄了C++版本的。
 我只是想知道其中的原理, 请赐教

2005-09-09 10:00
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
指向指针的指针,就可以了

2005-09-10 10:23
快速回复:[求助]关于内存分配的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017631 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved