关于数据的动态申请内存的问题
#include<stdio.h>#include<stdlib.h>
#include<string.h>
//创建一个线性表的数据类型 参数:【数组 , 元素个数 , 内存空间】
struct list{
int *arr;
int len_list;
int com_list;
};
void init_list( struct list *st ); //初始化一个空表: 分配内存
void clear_list( struct list *st ); //清空线性表
bool empty_list( struct list *st ); //判断线性表是否为空
bool get_elem( struct list *st , int pos , int *e ); //获取线性表某个位置的值
void insert_list(struct list *st , int num ); //插入一个元素
void show_list( struct list *st ); //打印线性表
int main()
{
struct list A;
int ii , a1;
init_list(&A); //初始化线性表
for(ii=0 ; ii<15 ; ii++ ) //为线性表赋值
{
insert_list(&A , ii);
}
show_list(&A);
clear_list(&A); //清空线性表
printf("leng=%d , comp=%d\n" , A.len_list , A.com_list);
return 0;
}
void show_list( struct list *st ) //打印线性表
{
if( (st->len_list) == 0 ){ printf("空表\n"); return;}
int ii=0;
for( ii=0 ; ii<(st->len_list) ; ii++)
{
printf("%d " , st->arr);
}
printf("\n");
}
void insert_list(struct list *st , int num ) //插入一个元素
{
//判断内存空间是否充足 添加空间
if( (st->len_list) == (st->com_list) )
{
struct list tmp; //申请一个临时结构体 扩充线性表空间
int ii;
tmp.len_list = 0;
tmp.com_list = (st->com_list)+10;
tmp.arr = (int*)malloc((st->com_list)*sizeof(int));
//为临时结构体赋值
for(ii=0 ; ii<(st->com_list) ; ii++)
{
tmp.arr = (st->arr); tmp.len_list++;
}
//释放内存
free(st->arr);st->com_list=st->len_list=0; 我这里释放旧的内存空间
st->arr = tmp.arr;st->com_list = tmp.com_list;st->len_list=tmp.len_list; 给指针重新指定一个新的空间的用法是不是不对
}
st->arr = num;
st->len_list++;
return;
}
bool get_elem( struct list *st , int pos , int *e ) //获取线性表某个位置的值
{
//查找的值不在范围内
if( pos<=0 || pos>(st->len_list) ){return false;}
*e = (st->arr)-1;
return true;
}
boolempty_list( struct list *st ) //判断线性表是否为空
{
if( (st->len_list) == 0 )returntrue;
return false;
}
void clear_list( struct list *st ) //清空线性表
{
st->len_list = 0;
st->com_list = 0;
free(st->arr);
}
void init_list( struct list *st ) //初始化一个空表
{
int ii=0;
//首先为空表分配10个数据空间
st->com_list = 10;
st->len_list = 0;
st->arr = (int*)malloc(( st->com_list)*sizeof(int));
//赋值为0
for(ii=0 ; ii<st->com_list ; ii++) (st->arr) = 1;
}
在添加元素的时候 扩充数组长度就报错 请问有大神知道是为什么 扩充内存,你搞个局部变量struct list tmp; //申请一个临时结构体 扩充线性表空间 有何用? 出了函数就没了。
扩充内存用malloc又还要想办法复制之前的数据。
用relloc一句不就搞定了。
int main()
{
struct list A;
int ii , a1;
init_list(&A); //初始化线性表
for(ii=0 ; ii<15 ; ii++ ) //为线性表赋值
{
insert_list(&A , ii);
}
show_list(&A);
// clear_list(&A); //清空线性表
printf("leng=%d , comp=%d\n" , A.len_list , A.com_list);
return 0;
}
void insert_list(struct list *st , int num ) //插入一个元素
{
//判断内存空间是否充足 添加空间
if( (st->len_list) == (st->com_list) )
{
realloc(st->arr, st->com_list + (sizeof(int) * 10)); // 扩充10
}
st->arr = num;
st->len_list++;
return;
}
页:
[1]