c语言线性表动态分配问题
有两个问题,第一:main函数里的 printf("%d",L.length);//输出为0,为什么???第二:main函数里,经过IncreaseSize(L,5)后的的 printf("%d",L.data);//这里为什么之前存入的数据就消失了,又变成脏数据了???//
// Created by Administrator on 2021/5/4 0004.
//
#include <stdio.h>
#include <malloc.h>
#include "demo3.h"
#define InitSize 10
typedef struct {
int *data;
int MaxSize;
int length;
}seqList;
void InitList(seqList &L){
L.data=(int *)malloc(InitSize *sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
//增加动态数组长度
void IncreaseSize(seqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)* sizeof(int));
for (int i = 0; i < L.length; i++) {
L.data=p;
}
L.MaxSize=L.MaxSize+len;
L.length=0;
free(p);
}
int main(){
seqList L;
InitList(L);
L.data[0]=11;
L.data[1]=22;
L.data[2]=33;
L.data[3]=44;
L.data[4]=55;
printf("%d",L.length);//输出为0,为什么???
printf("\n");
for(int i=0;i<L.MaxSize;i++){
printf("%d",L.data);
printf("\n");
}
printf("---------------------");
IncreaseSize(L,5);
printf("%d",L.MaxSize);
printf("\n");
printf("%d",L.length);
printf("\n");
for(int i=0;i<L.MaxSize;i++){
printf("%d",L.data);//这里为什么之前存入的数据就消失了,又变成脏数据了???
printf("\n");
}
}
各位大佬,救救孩子吧,快被数据结构逼疯了:'(weeqw 调试看了一下,1是因为InitList中给length赋值为0,后面没改动。2、因为length为0,分配内存后,for不执行。没将原来数据复制回去,另外for里面赋值数据也有问题 代码中 L.length自始致终都是0,因为你给length一直赋的值就是0
IncreaseSize(L,5);这句话,又重新分配了空间,并且由于length一直是0, 函数中的for循环赋值也是不会执行的,所以就是脏数据
代码中还存在多次malloc,没有被free的情况,存在内存泄漏,要小心 苏紫方璇 发表于 2021-5-4 15:26
调试看了一下,1是因为InitList中给length赋值为0,后面没改动。2、因为length为0,分配内存后,for不执行 ...
第二个我的是i<L.Maxsize,Maxsize是有值的 本帖最后由 163585580 于 2021-5-4 16:11 编辑
nanaqilin 发表于 2021-5-4 15:32
代码中 L.length自始致终都是0,因为你给length一直赋的值就是0
IncreaseSize(L,5);这句话,又重新分配了 ...
ok,明白了已经 163585580 发表于 2021-5-4 15:45
第二个我的是i
我说的是IncreaseSize里的for
页:
[1]