吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 850|回复: 6
收起左侧

[求助] c语言线性表动态分配问题

[复制链接]
163585580 发表于 2021-5-4 15:11
有两个问题,第一: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
各位大佬,救救孩子吧,快被数据结构逼疯了
苏紫方璇 发表于 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是有值的

点评

我说的是IncreaseSize里的for  详情 回复 发表于 2021-5-4 15:48
 楼主| 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

我说的是IncreaseSize里的for
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-24 06:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表