c语言程序设计问题_c语言问题,程序执行后为什么空间每增加?

原问题:c语言问题,程序执行后为什么空间每增加?
分类:编程开发 > 最后更新时间:【2017-04-16 22:55:38】
问题补充:

#include <stdio.h>

#include <stdlib.h>

#define LIST_INIT_SIZE 300 //线性表存储空间的初始分配量

#define LISTINCRESEMENT 100 //线性表存储空间的分配增量

#define OK 1

#define ERROR 0

#define OVERFLOW 0

typedef int elemType;//元素类型

typedef struct

{

elemType *List;//线性表首地址

int length;//当前的长度

int listsize;//当前分配的存储容量,以elemType为单位

} SqList;

void AgainMalloc(SqList *L)//空间不够时重新分配空间的函数

{

elemType *newbase;//分配一个临时基址

newbase=(elemType *)realloc(L->List,(L->listsize+LISTINCRESEMENT)*sizeof(elemType));

if(!newbase) exit(OVERFLOW);

L->List=newbase;

L->listsize+=LISTINCRESEMENT;

}

//初始化一个空的线性表

int InitList_Sq(SqList *L)

{

L->List=(elemType *)malloc(LIST_INIT_SIZE*sizeof(elemType));

//malloc分配一定的内存空间,然后把这段内存空间的地址赋值给L.elem

//如果malloc分配成功,L->List指向分配的空间,如果分配失败(比如内存不够)

//malloc会返回0,L->List的值就被赋0

if(!L->List)

exit(OVERFLOW);//overflow exit是退出程序的函数

L->length=0;//初始表为空表

L->listsize=LIST_INIT_SIZE;//初始表的存储容量,为LIST_INIT_SIZE个elemType单位

return OK;

}

int main()

{

SqList *list1;

InitList_Sq(list1);

printf("%p\n",list1);

AgainMalloc(list1);

printf("%p\n",list1);

}

最佳答案

你的头指针没有初始化,在你的

int InitList_Sq(SqList *L)

中,你的L是个野指针(你没有给它值,它是随机的)

而你的

L->List=(elemType *)malloc(LIST_INIT_SIZE*sizeof(elemType));

因为L是没有分配地址所以内存出错了


追问:
大佬能帮忙修改一下吗? 追答:
最简单的改 SqList *list1; 为 SqList *list1=(SqList *)malloc(sizeof(SqList)); 就可以了
追问:
增加空间后首地址还是一样的,对吧,怎么查看空间大小的变化?
追问:
int a=sizeof(list1); printf("%d\n",a);用这段代码可以吗?
  • 追答:
    这个当然不可以,你的a只是变量list本身的大小,且它是静态的,32位下它就是4C语言的内存管理是通过系统的接口来完成的,所以,它本身没有函数来查看一个指针所能空间大小(这个只是在编程时由编程者控制),也没有标准函数来查看系统的内存变化(不同系统的内存管理是不同的),你一定要了解内存的状态,就要直接用系统的API或其系统调用,且这个一般都是操作系统厂家内部的函数,有的甚至是不公开的
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    13

    分享到:

    其他回答

    其它网友回答:
    malloc分配的内存空间,用完要用free函数释放

    其它网友回答:
    记得要释放内存

    其它网友回答:
    使用完要释放内存

    其它网友回答:
    不是所有程序执行后都能增加空间的

    其它网友回答:
    程序结束后未释放的内存会由系统回收
    但是这不是个好习惯,作为合格的C程序员,内存的分配和释放应在程序中体现,避免出现内存溢出的问题


    追问:
    我这是因为被系统回收了?

    其它网友回答:
    因为使用完内存之后没有释放内存的