163585580 发表于 2021-5-4 15:11

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");
    }


}

163585580 发表于 2021-5-4 15:12

各位大佬,救救孩子吧,快被数据结构逼疯了:'(weeqw

苏紫方璇 发表于 2021-5-4 15:26

调试看了一下,1是因为InitList中给length赋值为0,后面没改动。2、因为length为0,分配内存后,for不执行。没将原来数据复制回去,另外for里面赋值数据也有问题

nanaqilin 发表于 2021-5-4 15:32

代码中 L.length自始致终都是0,因为你给length一直赋的值就是0
IncreaseSize(L,5);这句话,又重新分配了空间,并且由于length一直是0, 函数中的for循环赋值也是不会执行的,所以就是脏数据
代码中还存在多次malloc,没有被free的情况,存在内存泄漏,要小心

163585580 发表于 2021-5-4 15:45

苏紫方璇 发表于 2021-5-4 15:26
调试看了一下,1是因为InitList中给length赋值为0,后面没改动。2、因为length为0,分配内存后,for不执行 ...

第二个我的是i<L.Maxsize,Maxsize是有值的

163585580 发表于 2021-5-4 15:46

本帖最后由 163585580 于 2021-5-4 16:11 编辑

nanaqilin 发表于 2021-5-4 15:32
代码中 L.length自始致终都是0,因为你给length一直赋的值就是0
IncreaseSize(L,5);这句话,又重新分配了 ...
ok,明白了已经

苏紫方璇 发表于 2021-5-4 15:48

163585580 发表于 2021-5-4 15:45
第二个我的是i

我说的是IncreaseSize里的for
页: [1]
查看完整版本: c语言线性表动态分配问题